我有一个看起来像这样的数据框
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
有人可以帮我吗?
答案 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