通过合并更好地替代 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章