这是一个代码,用于将示例数据与日期进行比较,并给出一个熊猫数据框,以便将该日的所有日期和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
答案 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'
对象。为我工作。