【问题标题】:Pandas Time Series: Remove Rows Per IDPandas 时间序列:删除每个 ID 的行
【发布时间】:2019-10-23 22:24:33
【问题描述】:

我有一个如下形式的 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。这意味着只有当日期小于 2019/03/28(30 天前)时,我才能为 ID =1 选择行。因此,2019/04/27ID=1 的行将被删除。

如何在 Pandas 中执行此操作。非常感谢任何帮助。

谢谢。

最终的数据框将是:

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

【问题讨论】:

    标签: python pandas dataframe time-series pandas-groupby


    【解决方案1】:

    在您的情况下使用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,以防止设置复制错误。

    【讨论】:

      猜你喜欢
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 2019-07-31
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多