Raf*_*ael 0 python time-series dataframe pandas pandas-groupby
我有以下形式的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
Run Code Online (Sandbox Code Playgroud)
我需要做什么?
为每个ID选择距其最近的度量值至少30天的行。
即,最后的日期Id = 2是2019/08/27,所以ID =2我需要选择年纪大了至少30天的行。因此,2019/08/27ID为2 的行本身将被删除。
同样,ID = 1的最新日期是2019/04/28。这意味着ID =1仅当日期小于2019/03/28(早于30天)时,我才能选择行。因此,2019/04/27带有的ID=1行将被删除。
如何在熊猫中做到这一点。任何帮助是极大的赞赏。
谢谢。
最终数据帧将是:
Date ID Temp
2019/03/27 1 23
2019/04/27 2 32
2019/01/27 2 33
Run Code Online (Sandbox Code Playgroud)
在您的情况下使用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
Run Code Online (Sandbox Code Playgroud)
注意,我将.copy在末尾添加,以防止设置复制错误。