使用滚动时间窗口的Python Pandas计数

时间:2018-12-10 14:41:59

标签: python pandas dataframe

我有一个看起来像这样的数据框

customerId Date         Amount_Spent
123        01/01/2018   500
456        01/01/2018   250
123        02/01/2018   300
456        02/01/2018   100

我想计算连续两天花费超过200的客户(与众不同)。

所以我希望得到

customerId Date1        Date2         Total_Amount_Spent
123        01/01/2018   02/01/2018    800

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

有两个检查,一个检查天数差异,另一个是使用all检查总金额大于100的金额,然后两种情况都满足,我们选择了ID。

s=df.groupby('customerId').agg({'Date':lambda x : (x.iloc[0]-x.iloc[-1]).days==-1,'Amount_Spent':lambda x : (x>100).all()}).all(1)
newdf=df.loc[df.customerId.isin(s.index),]
newdf
Out[1242]:
   customerId       Date  Amount_Spent
0         123 2018-01-01           500
2         123 2018-01-02           300

再次使用groupby + agg来获取所需的格式

newdf.groupby('customerId').agg({'Date':['first','last'],'Amount_Spent':'sum'})
Out[1244]: 
                 Date            Amount_Spent
                first       last          sum
customerId                                   
123        2018-01-01 2018-01-02          800