2017-09-24 64 views
1

我有這個數據幀。在一定條件下聚合

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

我想要一個新列,包含該用戶截止當天的帖子總數。我想要的樣子:

user day num_post total_todate 
A  1  1   0 
B  2  2   3 
B  1  3   0 
B  4  4   5 
A  2  5   1 
A  3  6   6 

任何想法?

回答

2

可以通過day,組由user排序的數據幀,計算num_posts列的累積和,然後通過1移下來:

df['total_todate'] = (df.sort_values('day').groupby('user').num_posts 
         .transform(
          lambda p: p.cumsum().shift() 
         ).fillna(0)) 

df 
# day num_posts user total_todate 
#0 1   1 A   0.0 
#1 2   2 B   3.0 
#2 1   3 B   0.0 
#3 4   4 B   5.0 
#4 2   5 A   1.0 
#5 3   6 A   6.0 
+1

或者,也許使用應用'df.sort_values([「用戶」 ,'day'])。groupby('user')。apply(lambda x:x ['num_posts']。cumsum()。shift()。fillna(0))' – Wen