【问题标题】:Avoid duplicate count columns with pandas groupby避免使用 pandas groupby 重复计数列
【发布时间】:2020-06-10 17:16:21
【问题描述】:

pandas.Dataframe.groupby(['date','some_category']).agg([np.sum, np.size]) 为每个总和列生成一个重复的计数。传递聚合函数列表时是否可以只输出一个计数列?

a = df_all.groupby(['date','some_category']).sum()
b = df_all.groupby(['date','some_category']).size()
pd.concat([a,b], axis=1)

基本上是我想要的,但看起来很尴尬。

【问题讨论】:

  • df.groupby('some_category')[column].agg([np.sum, np.size])
  • df_all = pd.DataFrame({'some_category': ['a','a','a','b','b'], 'x': [0,1,2,3,4], 'y': [5,5,6,7,7]}) df_all.groupby('some_category').agg({'x': [np.sum, np.size], 'y': np.sum}) 这不是一个完整的答案,所以我将它放在评论中。你可以做这样的事情,你明确地为你想要的每一列命名操作,但与你的例子相比,对于许多列来说,这些感觉就像你要做很多工作。
  • 感谢@Alexander,但这似乎给出了相同的结果。我已经编辑了我的帖子,因为问题似乎来自多个字段的分组。我的对象列表分为 3 个类别,我按日期和类型总结了 x 和 y 维度。我还想在输出中包含每个日期/类型的计数,但不要重复 x 和 y 的(相同)计数。
  • 请提供一个可重现的例子。
  • 感谢@clesiemo3,这看起来像是我需要的基本解决方案。我想我想看到的是 agg 函数中的 'include_count=True' 标志或其他避免与其他聚合一起计算的方式。也许这存在于熊猫的其他地方。

标签: python numpy aggregate pandas-groupby


【解决方案1】:

df.pivot_table(index=['date', 'some_category'],aggfunc=['sum', 'size']) 是我要找的。这会生成单个大小的列(尽管我不确定为什么将其标记为“0”),而不是每个求和列的重复(相同)大小。谢谢大家,一路上我学到了一些有用的东西。

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2021-05-16
    • 2013-10-08
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多