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

时间:2019-06-08 23:16:02

标签: python pandas dataframe time-series 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

我需要做什么?

  

为每个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

1 个答案:

答案 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,以防止设置复制错误。