2017-07-28 46 views
0

我經常發現自己正在對數據幀執行groupby-apply,然後將結果與原始數據幀合併。這是一個例子。假設df包含列A和B.我想添加另一列,其值是列B與所有具有與當前行相同列A值的行的總和。下面的工作,但它顯然是次優的熊貓:將groupby-apply與join/merge結合使用

df.join(df.groupby('A')['B'].sum(), on='A', rsuffix='_sum') 

是否有可能反而保持原來的索引在groupby-sum?

回答

5

您可以使用groupby.transform

df['B_sum'] = df.groupby('A').B.transform('sum') 

演示

df = pd.DataFrame({ 
     'A': [1,1,2,2], 
     'B': [1,2,3,4] 
    }) 

df['B_sum'] = df.groupby('A').B.transform('sum') 

df 
# A B B_sum 
#0 1 1 3 
#1 1 2 3 
#2 2 3 7 
#3 2 4 7