在一定条件下聚集

时间:2017-09-24 01:35:33

标签: python pandas

我有这个数据框。

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  

有什么想法吗?

1 个答案:

答案 0 :(得分: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