python - 嵌套循环和使用 iterrows 索引 pandas 数据帧
问题描述
我正在尝试通过数据框执行嵌套循环,而我在使用 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'])
我是通过嵌套循环完成的,但在这里我不确定如何进行如上所示的索引,并且以某种方式预期的结果是错误的。代码如下所示:
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 one for 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
推荐阅读
- c# - 使用 dir.GetDirectories 时排除具有特定模式的目录
- java - selenium java中的多个角色
- reactjs - react.js 桌面和移动 web 项目架构
- javascript - 如何从另一个组件调用 React 的渲染方法()?
- gradle - 如何获取 Gradle CodeNarc 任务来检查 Gradle 构建文件?
- asp.net-core - 从 ASP.NET Core MVC 端点获取 Twilio SMS 响应时遇到问题
- eclipse - PHPUnit 使用命令行,但不使用 Eclipse
- python - 如何使用python查找包含特定文本的单元格?
- javascript - Javascript:如何将新元素添加到具有键值对的数组中?
- javascript - 通过从 URL 获取百分比在 Django 中添加进度条