【发布时间】:2020-09-14 00:37:15
【问题描述】:
认为这会有点容易,但再一次 - 对我来说不是这样。
我创建了一个 groupby 并保存为数据框。现在我希望在该数据帧上执行 groupby,但每次我尝试对前一个 groupby 中求和的列进行计数时都会出错。以下是第一个 groupby 的数据框:
<class 'pandas.core.frame.DataFrame'>
employee int64
Date1 datetime64[ns]
Duration sum float64
RoundedInMinutes sum int64
RoundedOutMinutes sum int64
我可以使用 Date1 对员工进行分组,甚至可以使用 lambda 函数。但是,我无法对 Duration 执行 lambda 函数。持续时间有键错误。 dtype 中任何带有 sum 的列都会产生错误。
创建第一个 groupby 的代码:
groupedByEmployeeShift = df.groupby(['employee', 'Date1']).agg({'Duration': ['sum'], 'RoundedInMinutes': ['sum'], 'RoundedOutMinutes': ['sum']}).reset_index()
结果:
employee Date1 Duration RoundedInMinutes RoundedOutMinutes
sum sum sum
0 102209 2015-06-27 5.87 0 0
1 102209 2015-07-23 8.17 0 0
2 102209 2015-08-15 8.00 0 0
3 102209 2016-01-30 8.23 2 0
4 102209 2016-08-13 8.25 4 0
5 102209 2017-01-28 8.00 1 0
6 102209 2017-08-19 8.02 5 0
7 102209 2018-02-10 8.00 2 0
8 102209 2018-08-18 8.10 0 0
9 102209 2019-02-09 7.93 1 0
针对这个 groupby 数据框运行的代码:
shiftStats=groupedByEmployeeShift.groupby('employee')['Duration'].apply(lambda x: (x> 0).sum()).reset_index(name='OT_Shifts')
我知道这很简单 - 但我就是想不通。
非常感谢您的帮助。
【问题讨论】:
-
你可以删除多索引并尝试groupby。
groupedByEmployeeShift.columns = groupedByEmployeeShift.columns.droplevel(0) -
为什么不
groupedByEmployeeShift.loc[ groupedByEmployeeShift['Duration'].gt(0) ].groupby('employee')['Duration'].sum()? -
你真的应该发布预期的输出,我认为你需要我评论的那个总和,但你的问题不清楚