基于日期过滤器的Python Pandas组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于日期过滤器的Python Pandas组相关的知识,希望对你有一定的参考价值。

我有以下数据帧。我需要根据最近30天和60天的ID添加PROFIT列进行分组。

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  SUM_PROFIT  TIME
0   1          10    30
1   2          10    30
2   1         120    60
3   2          10    60

以上是关于基于日期过滤器的Python Pandas组的主要内容,如果未能解决你的问题,请参考以下文章

python 在Pandas DataFrame中查找连续日期组

Python Pandas:按日期分组,并按时间戳访问每个组

Python 帮助 - 添加基于日期范围创建列

在 Python Pandas 中将带有元素日期标签的年度财政数据元组转换为时间序列

使用 python、pandas 合并 2 个基于 3 个条件的单独 excel 文件

Python pandas - 在缺少日期的情况下按组有效地将函数应用于滚动窗口