2017-08-18 18 views

回答

2

選項1
transform返回與原始對象的相同的索引的結果。
我使用assign以新列返回數據幀的副本。
有關更多信息,請參閱split-apply-combine文檔。

df.assign(Sum=df.groupby('col1').col2.transform('sum')) 

    col1 col2 Sum 
0 a  1 6 
1 a  2 6 
2 a  3 6 
3 b  1 3 
4 b  2 3 

選項2
正常groupbysum的效果,請使用join

df.join(df.groupby('col1').col2.sum().rename('Sum'), on='col1') 

    col1 col2 Sum 
0 a  1 6 
1 a  2 6 
2 a  3 6 
3 b  1 3 
4 b  2 3 

選項3
創意與pd.factorizenp.bincount

f, u = df.col1.factorize() 
df.assign(Sum=np.bincount(f, df.col2).astype(df.col2.dtype)[f]) 

    col1 col2 Sum 
0 a  1 6 
1 a  2 6 
2 a  3 6 
3 b  1 3 
4 b  2 3 
方法
2

使用transform

df['sum'] = df.groupby('col1')['col2'].transform('sum') 
print (df) 
    col1 col2 sum 
0 a  1 6 
1 a  2 6 
2 a  3 6 
3 b  1 3 
4 b  2 3 

或者map通過aggrega TE sum

df['sum'] = df['col1'].map(df.groupby('col1')['col2'].sum()) 
print (df) 
    col1 col2 sum 
0 a  1 6 
1 a  2 6 
2 a  3 6 
3 b  1 3 
4 b  2 3 
相關問題