Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并groupby的更好选择_Python_Pandas_Merge_Group By - Fatal编程技术网

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