嵌套循环和使用iterrows索引pandas数据帧

2024-03-28 19:07:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过一个数据帧执行一个嵌套循环,我对使用python真的很陌生。不知怎么的,通过谷歌我找到了许多例子,但最后一个是我需要的。我使用iterrows在数据帧上循环,并仅使用具有相同日期的数据对日期进行索引。这很管用。现在我想要嵌套循环,但不知道它是如何与iterrows一起工作的?代码如下:

import pandas as pd

df = pd.read_csv('C:/Files_Employees.csv', encoding='cp1252', sep=';', index_col=0).dropna()

for current_date in df.index.unique():
    print('calculating date: ' +str(current_date))

    for index, row in df.iterrows():
        if index == current_date:
            print(row['Person']) 

我是通过一个嵌套的循环来完成的,但是在这里我不确定我如何能够像上面所示那样进行索引,并且不知何故预期的结果是错误的。代码如下所示:

^{pr2}$

如果需要一个例子,我可以包括一个。在

示例文件如下所示:

working_date    Working Group   Person  Working Hours   Country
2017-07-14      1   Mike    59  USA
2017-07-14      2   Molly   60  USA
2017-07-14      3   Dennis  45  USA
2017-07-14      4   Pablo   45  USA
2017-07-14      1   Jeff    42  USA
2017-07-14      2   Emily   55  USA
2017-07-14      3   Sophia  46  USA
2017-07-14      4   Alice   41  USA
2017-07-14      1   Ethan   57  USA
2017-07-14      2   Alexander   59  USA
2017-07-14      3   Edward  41  USA
2017-07-14      4   Daniel  46  USA
2017-07-15      1   Mike    59  USA
2017-07-15      2   Molly   59  USA
2017-07-15      3   Dennis  61  USA
2017-07-15      4   Pablo   58  USA
2017-07-15      1   Jeff    58  USA
2017-07-15      2   Emily   51  USA
2017-07-15      3   Sophia  65  USA
2017-07-15      4   Alice   53  USA
2017-07-15      1   Ethan   49  USA
2017-07-15      2   Alexander   61  USA
2017-07-15      3   Edward  56  USA
2017-07-15      4   Daniel  65  USA

最终输出应如下所示,在嵌套循环中汇总每个工作组,例如工作组1的工作日期2017-07-14为59+42+57=158:

working_date    Working Group   Working Hours   Country
2017-07-14      1               158             USA
2017-07-14      2               174             USA
2017-07-14      3               132             USA
2017-07-14      4               132             USA
2017-07-15      1               166             USA
2017-07-15      2               171             USA
2017-07-15      3               182             USA
2017-07-15      4               176             USA

Tags: csv数据代码indffordateindex
1条回答
网友
1楼 · 发布于 2024-03-28 19:07:03

对于Pandas,应该使用向量化操作。在这里,您只需使用GroupBy+sum

res = df.groupby(['working_date', 'WorkingGroup', 'Country']).sum().reset_index()
#alternative
res = (df.groupby(['working_date','Working Group', 'Country'], as_index=False)
         ['Working Hours'].sum())
print(res)

  working_date  WorkingGroup Country  WorkingHours
0   2017-07-14             1     USA           158
1   2017-07-14             2     USA           174
2   2017-07-14             3     USA           132
3   2017-07-14             4     USA           132
4   2017-07-15             1     USA           166
5   2017-07-15             2     USA           171
6   2017-07-15             3     USA           182
7   2017-07-15             4     USA           176

相关问题 更多 >