【发布时间】:2021-08-04 11:36:57
【问题描述】:
我有这样的数据框:
id date sum
a 1/1/2001
a 1/1/2001
a 1/1/2001
a 1/1/2001 50
a 1/1/2001 10
a 1/1/2001 60
b 1/1/2001
b 1/1/2001
b 1/1/2001 100
b 1/1/2001 100
b 1/1/2001
b 1/1/2001 100
我想要一个名为 Rolling 的新列,它将是 cumsum/cumcount 但问题是 cumsum 没有将空值添加为空值,但分母计数也采用空值。我的代码是
df['Rolling'] = df.groupby('id').apply(lambda x: x['sum'].cumsum()/ range(1,len(x)+1))).values
我希望我的输出为:
id date sum Rolling
a 1/1/2001
a 1/1/2001
a 1/1/2001
a 1/1/2001 50 50 #50/1
a 1/1/2001 10 30 #50+10/2
a 1/1/2001 60 40 #50+10+60/3
b 1/1/2001
b 1/1/2001
b 1/1/2001 100 100 #100/1
b 1/1/2001 100 100 #100+100/2
b 1/1/2001
b 1/1/2001 100 100 #300/3
但我得到的是:
id date sum Rolling
a 1/1/2001
a 1/1/2001
a 1/1/2001
a 1/1/2001 50 12.5 #50/4
a 1/1/2001 10 12 #50+10/5
a 1/1/2001 60 20 #50+10+60/6
b 1/1/2001
b 1/1/2001
b 1/1/2001 100 33.33 #100/3
b 1/1/2001 100 50 #200/4
b 1/1/2001
b 1/1/2001 100 50 #300/6
【问题讨论】:
标签: python pandas range cumsum