2017-10-19 76 views
2

我想agg和功能cummaxcumsum找到为A相同值的列B滚动总和和滚动最大的df在连续的行GROUPBY累计操作大熊猫

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

df_result = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b', 'b', 'b'], 'B': [5, 2, 4, 7, 1, 11, 3], 'SUM': [5, 7, 11, 7, 8, 19, 22], 'MAX': [5, 5, 5, 7, 7, 11, 11]}) 

回答

2

使用groupby与聚集去年join原创:

d = {'cummax':'max', 'cumsum':'sum'} 
df_result = df.join(df.groupby('A')['B'].agg(['cummax','cumsum']).rename(columns=d)) 
print (df_result) 
    A B max sum 
0 a 5 5 5 
1 a 2 5 7 
2 a 4 5 11 
3 b 7 7 7 
4 b 1 7 8 
5 b 11 11 19 
6 b 3 11 22 

如果有可能修改原来DataFrame

df[['max','sum']] = df.groupby('A')['B'].agg(['cummax','cumsum']) 
print (df) 
    A B max sum 
0 a 5 5 5 
1 a 2 5 7 
2 a 4 5 11 
3 b 7 7 7 
4 b 1 7 8 
5 b 11 11 19 
6 b 3 11 22