【问题标题】:Filtering dataframe given a list of dates给定日期列表过滤数据框
【发布时间】:2022-01-23 12:15:35
【问题描述】:

我有以下数据框:

            Date            Site
0   1999-10-01 12:00:00      65
1   1999-10-01 16:00:00      21
2   1999-10-02 11:00:00      57
3   1999-10-05 12:00:00      53
4   1999-10-10 16:00:00      43
5   1999-10-24 07:00:00      33
6   1999-10-24 08:00:00      21

我有一个从 tolist() 在另一个数据框中获得的日期时间列表。

[Timestamp('1999-10-01 00:00:00'),
 Timestamp('1999-10-02 00:00:00'),
 Timestamp('1999-10-24 00:00:00')]

tolist() 的目的是根据列表中的日期过滤数据框。最终结果是:

            Date            Site
0   1999-10-01 12:00:00      65
1   1999-10-01 16:00:00      21
2   1999-10-02 11:00:00      57
5   1999-10-24 07:00:00      33
6   1999-10-24 08:00:00      21

只有 10 月 1 日、2 日和 24 日的行会出现在数据框中。

这样做的方法是什么?我查了一下,只看到在日期或单个日期之间进行过滤的解决方案。

谢谢。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    如果想比较Timestamp而不用时间使用Series.dt.normalize

    df1 = df[df['Date'].dt.normalize().isin(L)]
    

    Series.dt.floor

    df1 = df[df['Date'].dt.floor('d').isin(L)]
    

    对于按日期进行比较,还需要将 list 转换为 dates:

    df1 = df[df['Date'].dt.date.isin([x.date for x in L])]
    

    print (df1)
                     Date  Site
    0 1999-10-01 12:00:00    65
    1 1999-10-01 16:00:00    21
    2 1999-10-02 11:00:00    57
    5 1999-10-24 07:00:00    33
    6 1999-10-24 08:00:00    21
    

    【讨论】:

      猜你喜欢
      • 2021-01-16
      • 1970-01-01
      • 2020-05-05
      • 2019-11-27
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多