基于日期筛选器在Python中分组

基于日期筛选器在Python中分组,python,pandas,filter,Python,Pandas,Filter,我有以下数据帧。 我需要按ID分组,添加基于最近30天和60天的利润列 import pandas as pd df = pd.DataFrame({"ID":[1,1,1,1,2,2,2,2],"DATE":['2019-04-03','2019-03-03','2019-03-01','2019-02-03','2019-02-01','2019-01-01','2019-01-06','2019-04-03'],"PROFIT":[10,20,30,60,90,100,20,10]})

我有以下数据帧。 我需要按ID分组,添加基于最近30天和60天的利润列

import pandas as pd
df = pd.DataFrame({"ID":[1,1,1,1,2,2,2,2],"DATE":['2019-04-03','2019-03-03','2019-03-01','2019-02-03','2019-02-01','2019-01-01','2019-01-06','2019-04-03'],"PROFIT":[10,20,30,60,90,100,20,10]})

    ID  DATE    PROFIT
0   1   2019-04-03  10
1   1   2019-03-03  20
2   1   2019-03-01  30
3   1   2019-02-03  60
4   2   2019-02-01  90
5   2   2019-01-01  100
6   2   2019-01-06  20
7   2   2019-04-03  10
最终结果:

df_end = pd.DataFrame({"ID":[1,1,2,2],"TIME":[30,60,30,60],"SUM_PROFIT":[10,60,10,90]})

    ID  TIME    SUM_PROFIT
0   1   30      10
1   1   60      60
2   2   30      10
3   2   60      90

IIUC,那么你可以试试这样:

timespan = [30, 60]
pd.concat([df.sort_values('DATE', ascending=False)
             .groupby(['ID'])
             .apply(lambda x: x.loc[x['DATE'].head(1).values[0]-x['DATE']<=pd.Timedelta(days=t),'PROFIT'].sum())
             .rename('SUM_PROFIT').reset_index().assign(TIME = t) for t in timespan],
          ignore_index=True)

不退出清楚您需要什么..并且很难将您的预期输出与输入数据相匹配它是通过ID添加基于过去30天和60天的金额来汇总的。时间(30)=(日期时间增量(30)).strftime(“%Y-%m-%d”)sum(利润)=sum_利润不确定上面这一行的意思,但您没有看到错误吗?对于ID2,从今天起60天内只有
2019-04-03 10
。那么,为什么他们60天的总利润有90分呢?太好了,如果我有两列要求和呢?(除了利润)我想你也可以这么做,只要稍微修改一下“.rename”方法。太好了!或者只是在另一个步骤中重命名
   ID  SUM_PROFIT  TIME
0   1          10    30
1   2          10    30
2   1         120    60
3   2          10    60