Python Pandas:几个月来每天都在做cumsum

时间:2017-03-01 02:35:39

标签: python pandas dataframe cumsum

我有一个数据框,如下所示

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美元

1 个答案:

答案 0 :(得分:2)

你可以groupby.cumsum

df['AmountToDate'] = df.groupby(['Storeid', 'Year-Month']).Amount.cumsum()
df

enter image description here

更新:要提取相应的行,您可以使用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)))

enter image description here

这是如何运作的?

  • groupby.apply表示lambda方法中的apply表达式分别应用于每个组(此处为Storeid和Year-Month的唯一组合);
  • 传递给lambda表达式的参数g是具有唯一storeid + Year-Month(组变量)的子数据框,对于每个数据框计算Amount cumsum,并过滤出cumsum> = target的行并使用head(1)第一行。