问题描述
这对我来说有点容易,但再次出现-情况并非如此-
我创建了一个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的任何列都会产生错误。
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
要针对此分组依据数据帧运行的代码:
shiftStats=groupedByEmployeeShift.groupby('employee')['Duration'].apply(lambda x: (x> 0).sum()).reset_index(name='OT_Shifts')
我知道这很简单-但我无法弄清楚。
非常感谢您的帮助。
解决方法
Jeeze。不明显,但易于修复。 “和”位于数据帧头的第二行。只需使用下面的代码将其删除,即可立即使用。
groupedByEmployeeShift.columns = groupedByEmployeeShift.columns.droplevel(-1)