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

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 = 22019/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)

WeN*_*Ben 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
Run Code Online (Sandbox Code Playgroud)

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