我正在尝试通过数据框执行嵌套循环,而使用python确实是我的新手。不知何故,我在Google上找到了很多例子,但最后一个例子是我需要的。我使用 iterrows 遍历数据框并在日期上使用仅具有相同 date 的数据进行索引。这样可行。现在我想要嵌套循环,但不知道它如何与迭代一起工作?代码如下所示:
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'])
我是通过嵌套循环完成的,但是在这里我不确定如何进行如上所示的索引编制,并且预期的结果是错误的。该代码如下所示:
import pandas as pd
df = pd.read_csv('C:/Files_Employees.csv', encoding='cp1252', sep=';', index_col=0).dropna()
df2 = pd.DataFrame([])
for i in range(0, len(df)):
for j in range(i+1, len(df)):
if df.iloc[i]['Working Group'] == df.iloc[j]['Working Group']:
working_hours = df.iloc[i]['Working Hours'] + df.iloc[j]['Working Hours']
print(df.iloc[i]['Working Group'], working_hours)
如果需要一个示例,我可以提供一个示例。
示例文件如下所示:
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
最终支出应类似于以下内容,它将每个工作组的嵌套循环汇总在一起,例如工作日期为2017年7月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
答案 0 :(得分:0)
对于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