Pandas:在DataFrame中创建聚合列

fog*_*rit 25 python pandas

以下面的DataFrame为例,

In [83]:
df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})
df
Out[83]:
   A  B  values
0  1  1      10
1  1  2      15
2  2  1      20
3  2  2      25
Run Code Online (Sandbox Code Playgroud)

生成包含其中一列的数据聚合的新列的简单方法是什么?

例如,如果我总结values项目A

In [84]:
df.groupby('A').sum()['values']
Out[84]:
A
1    25
2    45
Name: values
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到

   A  B  values  sum_values_A
0  1  1      10            25
1  1  2      15            25
2  2  1      20            45
3  2  2      25            45
Run Code Online (Sandbox Code Playgroud)

Wou*_*ire 36

In [20]: df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})

In [21]: df
Out[21]:
   A  B  values
0  1  1      10
1  1  2      15
2  2  1      20
3  2  2      25

In [22]: df['sum_values_A'] = df.groupby('A')['values'].transform(np.sum)

In [23]: df
Out[23]:
   A  B  values  sum_values_A
0  1  1      10            25
1  1  2      15            25
2  2  1      20            45
3  2  2      25            45
Run Code Online (Sandbox Code Playgroud)


fog*_*rit 6

我找到了一种使用方法join

In [101]:
aggregated = df.groupby('A').sum()['values']
aggregated.name = 'sum_values_A'
df.join(aggregated,on='A')

Out[101]:
   A  B  values  sum_values_A
0  1  1      10            25
1  1  2      15            25
2  2  1      20            45
3  2  2      25            45
Run Code Online (Sandbox Code Playgroud)

有人有更简单的方法吗?