通过合并更好地替代 groupby [重复]

Posted

技术标签:

【中文标题】通过合并更好地替代 groupby [重复]【英文标题】:Better alternative to a groupby with a merge [duplicate] 【发布时间】:2019-01-24 14:37:38 【问题描述】:

我想知道是否有人知道我目前正在做的更好的方法。这是一个示例数据集:

ID  Number
a   1
a   2
a   3
b   4
c   5
c   6
c   7
c   8

示例:如果我想按上表中的 ID 列计算数字。我会先做一个 groupby ID 并对 Number 进行计数,然后将结果合并回原始表,如下所示:

df2 = df.groupby('ID').agg('Number':'count').reset_index()

df2 = df2.rename(columns = 'Number':'Number_Count')

df = pd.merge(df, df2, on = ['ID'])

这会导致:

这感觉像是一种迂回的方式,有没有人知道更好的选择?我问的原因是因为在处理大型数据集时,这种方法会消耗大量内存(通过创建另一个表然后合并它们)。

【问题讨论】:

是的,在广播结果时使用transform df.groupby('ID')['ID'].transform('count') 这个不错,谢谢你的帮助! 我真的不同意重复,因为问题在于更有效的方法。根据数据框,transform 并不是最快的方法。 【参考方案1】:

你可以很简单地做到这一点:

import pandas as pd

df = pd.DataFrame('ID': list('aaabcccc'),
                   'Number': range(1,9))

df['Number_Count'] = df.groupby('ID').transform('count')

df

#  ID  Number  Number_Count
#0  a       1             3
#1  a       2             3
#2  a       3             3
#3  b       4             1
#4  c       5             4
#5  c       6             4
#6  c       7             4
#7  c       8             4

【讨论】:

这类问题无需回答,因为上面的评论很清楚地解释了解决方案。还有一个非常常见的副本

以上是关于通过合并更好地替代 groupby [重复]的主要内容,如果未能解决你的问题,请参考以下文章

熊猫有效地将groupby函数应用于每一列[重复]

合并熊猫 groupBy 对象

Groupby 单列并使用 Pandas 合并

一次在多列上使用 pandas groupby().apply(list) [重复]

c# linq groupby是默认去掉重复行吗

我应该避免在数据集/数据帧中使用groupby()吗? [重复]