【问题标题】:Groupby with both sum() and mean() [duplicate]具有 sum() 和 mean() 的 Groupby [重复]
【发布时间】:2021-11-17 16:32:52
【问题描述】:

我有一堆数据帧,我将它们连接成一个大数据帧。所有行都有一个日期时间、一个名称,然后是一些带有随机值的列,例如数据框可能类似于:

df =

ds                    name       val1     val2     val3
-------------------------------------------------------
2021-07-31 23:23:00   name1      2        3        4
2021-07-31 23:56:00   name2      3        4        5
2021-07-31 23:11:00   name1      4        5        6
2021-07-31 23:34:00   name2      5        6        7

我现在需要将这些行按name 分组,并将它们分成 60 分钟的 bin,我目前的做法如下:

final_df = df.groupby([pd.Grouper(freq="60min", key="ds"), "name"]).mean()

然后输出是一个新的数据框,其中行按name 分组,然后val 列值只是该name 的所有值的平均值。

这行得通。但是,我想做的不是取所有列的平均值,也许val2 列应该是值的总和,而不是平均值。

所以基本上最终的输出应该是:

df_final =

ds                    name       val1     val2     val3
-------------------------------------------------------
2021-07-31 23:00:00   name1      3        7        5
2021-07-31 23:00:00   name2      4        10       6

这可以通过任何方式完成,还是我必须将我的数据框分成两部分,然后再加入?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    DataFrameGroupBy.agg 与字典一起使用:

    df.groupby([pd.Grouper(freq="60min", key="ds"), "name"]).agg({'val1': 'mean', 'val2': sum, 'val3': 'mean'})
    

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2021-03-09
      • 2014-10-22
      相关资源
      最近更新 更多