【问题标题】:perform a groupby on dataframe created from a groupby对从 groupby 创建的数据框执行 groupby
【发布时间】: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()
  • 你真的应该发布预期的输出,我认为你需要我评论的那个总和,但你的问题不清楚

标签: pandas sum grouping dtype


【解决方案1】:

天哪。不明显但很容易修复。 “总和”位于数据帧标题的第二行。只需使用下面的代码将其删除,现在一切正常。

groupedByEmployeeShift.columns = groupedByEmployeeShift.columns.droplevel(-1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2018-12-08
    • 2022-12-17
    • 2014-07-24
    相关资源
    最近更新 更多