我有一个格式为Pandas的数据框:
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
我需要做什么?
为每个ID选择距最近测量至少30天的行。
即Id = 2
的最新日期是2019/08/27
,因此对于ID =2
,我需要选择至少早30天的行。因此,带有2019/08/27
且ID = 2的行本身将被删除。
类似地,ID = 1的最新日期是2019/04/28
。这意味着仅当日期少于ID =1
(提前30天)时,我才能选择2019/03/28
的行。因此,带有2019/04/27
的行ID=1
将被删除。
如何在熊猫中做到这一点。任何帮助将不胜感激。
谢谢。
最终数据框为:
Date ID Temp
2019/03/27 1 23
2019/04/27 2 32
2019/01/27 2 33
答案 0 :(得分:5)
在您使用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
,以防止设置复制错误。