时间序列:删除每个ID的行

2024-05-20 04:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下形式的数据帧:

Date       ID     Temp
2019/03/27 1       23
2019/04/27 2       32
2019/04/27 1       42
2019/04/28 1       41
2019/01/27 2       33
2019/08/27 2       23

我需要做什么

Select Rows which are at least 30 days old from their latest measurement for each id.

也就是说,Id = 2的最新日期是2019/08/27,所以对于ID =2,我需要选择至少早于30天的行。因此,ID=2的2019/08/27行本身将被删除

类似地,ID=1的最新日期是2019/04/28。这意味着只有在日期小于2019/03/28(早30天)时,我才能为ID =1选择行。因此,将删除带有ID=12019/04/27

如何在熊猫身上做到这一点。非常感谢您的帮助

谢谢你

最终数据帧为:

Date       ID     Temp
2019/03/27 1       23
2019/04/27 2       32
2019/01/27 2       33

Tags: 数据fromidwhichdatedaysselecttemp
1条回答
网友
1楼 · 发布于 2024-05-20 04:38:44

在您的例子中,使用groupby+transform('last')并过滤原始df

Yourdf=df[df.Date<df.groupby('ID').Date.transform('last')-pd.Timedelta('30 days')].copy()
        Date  ID  Temp
0 2019-03-27   1    23
1 2019-04-27   2    32
4 2019-01-27   2    33

注意,我在末尾添加了.copy,以防止设置复制错误

相关问题 更多 >