我有一个数据框,如下所示
figure;
scatter3(x,y,zz,'.k');
hold on
scatter3(x,y,z,'.');
我想要的输出是这个
Storeid Year-Month Date Amount
111 01-2016 2016-01-29 10
111 01-2016 2016-01-30 15
111 02-2016 2016-02-03 20
111 02-2016 2016-02-10 17
111 02-2016 2016-02-15 18
111 03-2016 2016-03-02 12
112 01-2016 2016-01-25 14
112 01-2016 2016-01-29 12
...
该值在每个月后重置,并再次从0开始。我尝试从pandas执行Storeid Year-Month Date Amount
111 01-2016 2016-01-29 10
111 01-2016 2016-01-30 25
111 02-2016 2016-02-03 20
111 02-2016 2016-02-10 37
111 02-2016 2016-02-15 55
111 03-2016 2016-03-02 12
112 01-2016 2016-01-25 14
112 01-2016 2016-01-29 26
...
函数,但是,它尝试在整个数据框中执行此操作。我如何限制它每个月做?
目标是找到"给定一个日期,哪个商店达到了该月的该日期的销售目标"。销售目标是1000美元
答案 0 :(得分:2)
你可以groupby.cumsum
:
df['AmountToDate'] = df.groupby(['Storeid', 'Year-Month']).Amount.cumsum()
df
更新:要提取相应的行,您可以使用groupby.apply(...cumsum..)
来执行更多自定义操作:
(df.groupby(['Storeid', 'Year-Month'], as_index=False, group_keys=False)
.apply(lambda g: g.assign(Amount = g.Amount.cumsum())[lambda x: x.Amount >= 25].head(1)))
这是如何运作的?
groupby.apply
表示lambda
方法中的apply
表达式分别应用于每个组(此处为Storeid和Year-Month的唯一组合); Amount
cumsum,并过滤出cumsum> = target的行并使用head(1)
第一行。