熊猫数据框日期时间比较代码中的错误?

时间:2020-10-26 15:10:48

标签: python pandas datetime

这是一个代码,用于将示例数据与日期进行比较,并给出一个熊猫数据框,以便将该日的所有日期和2小时标记为1,其余标记为0,我在下面的输出中提示其仅显示每天2个小时,样本数据仅为2天,而实际上我有300天

由于某种原因出现错误,无法获得输出

    import pandas as pd
    from datetime import datetime,timedelta
    # sample data
    df = pd.DataFrame({"date": [datetime(2020,10,2), datetime(2020,10,4)]})
    df_hr = pd.DataFrame({"hr": [datetime(2020,10,1,0,0) + i * timedelta(hours=1) for i in range(24*4)]})
    df_hr["flag"] = 0
    df_hr.loc[df_hr["hr"].dt.date.isin(df["date"]), "flag"] = 1
    # show the first and last hour of each day
    df_hr.loc[[0,23,24,47,48,71,72,95]]

这应该是输出

                         hr  flag 
    0  2020-10-01 00:00:00     0 
    23 2020-10-01 23:00:00     0 
    24 2020-10-02 00:00:00     1 
    47 2020-10-02 23:00:00     1 
    48 2020-10-03 00:00:00     0 
    71 2020-10-03 23:00:00     0 
    72 2020-10-04 00:00:00     1 
    95 2020-10-04 23:00:00     1 

我明白了

        hr  flag
    0   2020-10-01 00:00:00 0
    23  2020-10-01 23:00:00 0
    24  2020-10-02 00:00:00 0
    47  2020-10-02 23:00:00 0
    48  2020-10-03 00:00:00 0
    71  2020-10-03 23:00:00 0
    72  2020-10-04 00:00:00 0
    95  2020-10-04 23:00:00 0

1 个答案:

答案 0 :(得分:0)

您需要确保isin()与相同的对象类型进行比较。将您的.loc()语句更改为:

df_hr.loc[df_hr["hr"].dt.date.isin(df["date"].dt.date), "flag"] = 1

这会将'hr'的{​​{1}}列视为df_hr对象,然后查看该对象是否位于datetime.date的{​​{1}}列中< em>也转换为'date'对象。为我工作。

相关问题