【问题标题】:pandas group by ALL functionality?熊猫按所有功能分组?
【发布时间】:2017-01-14 20:32:03
【问题描述】:

我正在使用pandas groupby+agg 功能生成漂亮的报告

aggs_dict = {'a':['mean', 'std'], 'b': 'size'}
df.groupby('year').agg(aggs_dict)

我想在整个数据帧上使用相同的aggs_dict 作为一个组,不分年份,例如:

df.groupall().agg(aggs_dict)

或:

df.agg(aggs_dict)

但找不到任何优雅的方法来做到这一点。请注意,在我的真实代码中,aggs_dict 非常复杂,所以这样做相当麻烦:

df.a.mean()
df.a.std()
df.b.size()
....

我错过了一些简单而美好的东西吗?

【问题讨论】:

  • @ayhan IIUC,恰恰相反——如果整个索引是一个大副本,那么在这里可以工作。问题是关于整个 df 作为一个组的聚合,而不是每一行的聚合。
  • @AmiTavory 是的,在你回答之后我注意到了。 :)

标签: python pandas group-by


【解决方案1】:

您可以添加一个虚拟列:

df['dummy'] = 1

然后groupby + agg就可以了:

df.groupby('dummy').agg(aggs_dict)

然后delete it 完成后。

【讨论】:

    【解决方案2】:

    Ami Tavory 的回答是一个很好的方法,但如果您想要一个不需要创建新列并在之后删除它们的解决方案,您可以执行以下操作:

    df.groupby([True]*len(df)).agg(aggs_dict) 
    

    【讨论】:

    • 哇!正是我想要的(繁琐的符号,但我已经习惯了 pandas :)
    • 不错的答案!
    【解决方案3】:

    您也可以使用函数直接分组:

     df.groupby(lambda x: True).agg(aggs_dict)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2021-11-11
      • 2020-03-24
      相关资源
      最近更新 更多