Python 合并groupby的更好选择
我想知道是否有人知道一个更好的方法来完成我目前正在做的事情。以下是一个示例数据集:Python 合并groupby的更好选择,python,pandas,merge,group-by,Python,Pandas,Merge,Group By,我想知道是否有人知道一个更好的方法来完成我目前正在做的事情。以下是一个示例数据集: ID Number a 1 a 2 a 3 b 4 c 5 c 6 c 7 c 8 示例:如果我想在上表中按ID列获取数字计数。我将首先执行groupby ID并对数字进行计数,然后将结果合并回原始表,如下所示: df2 = df.groupby('ID').agg({'Number':'count'}).reset_index() df2 = df2.rename(colu
ID Number
a 1
a 2
a 3
b 4
c 5
c 6
c 7
c 8
示例:如果我想在上表中按ID列获取数字计数。我将首先执行groupby ID并对数字进行计数,然后将结果合并回原始表,如下所示:
df2 = df.groupby('ID').agg({'Number':'count'}).reset_index()
df2 = df2.rename(columns = {'Number':'Number_Count'})
df = pd.merge(df, df2, on = ['ID'])
这导致:
这感觉像是一种迂回的方式,有人知道更好的选择吗?我问这个问题的原因是,在处理大型数据集时,此方法可能会占用大量内存(通过创建另一个表,然后合并它们)。使用此方法可以非常简单地做到这一点:
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
是的,使用
transform
广播结果df.groupby('ID')['ID'])。transform('count')
很好,谢谢您的帮助!我真的不同意这个重复,因为这个问题是关于一个更有效的方法。根据数据帧的不同,transform
并不是实现这一点的最快方法。不需要回答这类问题,因为上面的注释清楚地解释了解决方案。还有一个非常常见的dup