使用 iterrows 嵌套循环和索引 pandas 数据框
Nested loops and indexing pandas dataframe using iterrows
我正在尝试通过数据帧执行嵌套循环,我对使用 python 真的很陌生。通过某种方式查看 google 我发现了很多示例,但我需要的是最后一个。我使用 iterrows 仅使用具有相同 date 的数据在日期上循环数据框和索引。这样可行。现在我想要嵌套循环但不知道它如何与 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'])
我是通过嵌套循环完成的,但在这里我不确定如何进行如上所示的索引,并且预期的结果不知何故是错误的。代码如下所示:
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
最终输出应该如下所示,它在嵌套循环中将每个工作组汇总在一起,例如Working_Group working_date 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
对于 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
我正在尝试通过数据帧执行嵌套循环,我对使用 python 真的很陌生。通过某种方式查看 google 我发现了很多示例,但我需要的是最后一个。我使用 iterrows 仅使用具有相同 date 的数据在日期上循环数据框和索引。这样可行。现在我想要嵌套循环但不知道它如何与 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'])
我是通过嵌套循环完成的,但在这里我不确定如何进行如上所示的索引,并且预期的结果不知何故是错误的。代码如下所示:
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
最终输出应该如下所示,它在嵌套循环中将每个工作组汇总在一起,例如Working_Group working_date 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
对于 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