【问题标题】:Filter a DataFrame by comparing dates from two different columns通过比较来自两个不同列的日期来过滤 DataFrame
【发布时间】:2019-06-06 16:56:55
【问题描述】:

我有一个看起来像这样的数据框:

   Publication Date        Date  Value State
0        2018-12-12  2018-12-11    2.0    AL
1        2018-12-12  2018-12-11    1.0    AZ
2        2018-12-12  2018-12-11    1.0    AK
3        2018-12-12  2018-12-11    2.0    NJ
4        2018-12-12  2018-12-11    1.5    NY
5        2018-12-12  2018-12-12   12.0    AL
6        2018-12-12  2018-12-12   13.0    AZ
7        2018-12-12  2018-12-12   14.0    AK
8        2018-12-12  2018-12-12   12.0    NJ
9        2018-12-12  2018-12-12   11.5    NY
10       2018-12-13  2018-12-12    2.0    AL
11       2018-12-13  2018-12-12    3.0    AZ
12       2018-12-13  2018-12-12    6.0    AK
13       2018-12-13  2018-12-12    1.0    NJ
14       2018-12-13  2018-12-12    4.0    NY

我想删除Publication date = Date + 1 的所有匹配项,所以当Publication Date = 2018-12-12Date = 2018-12-11 时,所有这些值都会被删除。

看起来像:

 Publication Date       Date  Value State
       2018-12-12 2018-12-12   12.0    AL
       2018-12-12 2018-12-12   13.0    AZ
       2018-12-12 2018-12-12   14.0    AK
       2018-12-12 2018-12-12   12.0    NJ
       2018-12-12 2018-12-12   11.5    NY

最简单的方法是什么?

【问题讨论】:

    标签: python pandas date datetime dataframe


    【解决方案1】:

    得到一个面具,用它来过滤df

    m = df['Publication Date'].eq(df['Date'] + pd.Timedelta(1, unit='D'))
    df[~m]
    
      Publication Date       Date  Value State
    5       2018-12-12 2018-12-12   12.0    AL
    6       2018-12-12 2018-12-12   13.0    AZ
    7       2018-12-12 2018-12-12   14.0    AK
    8       2018-12-12 2018-12-12   12.0    NJ
    9       2018-12-12 2018-12-12   11.5    NY
    

    如果“Publication Date”和“Date”不是日期时间列,请先使用pd.to_datetime(..., errors='coerce')进行强制。

    【讨论】:

      【解决方案2】:

      使用

      df[(df.Publication-df.Date).dt.days!=1]
      

      【讨论】:

        【解决方案3】:

        为此,请导入 timedelta

        from datetime import timedelta
        

        首先将日期列的数据类型转换为日期时间。

        df.Date = pd.to_datetime(df.Date)
        df["Publication Date"] = pd.to_datetime(df["Publication Date"])
        

        然后过滤数据帧

        df = df[df["Publication Date"] != df.date + timedelta(days=1)];
        

        【讨论】:

        • Pandas 有 pd.datetime 和 pd.TimeDelta。例如 pd.datetime.now() 或 pd.Timedelta('4 days 1 hr 32 s')。看来 datetime 是继承的:)所以你不需要导入它:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 2020-08-05
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多