对从groupby创建的数据框执行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的任何列都会产生错误

创建第一个分组依据的代码

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)