【发布时间】:2022-01-22 22:07:48
【问题描述】:
我有两个数据框:
df_A = pd.DataFrame({'start_date':['2021-04-01 00:00:00','2021-05-01 00:00:00', '2021-05-02 00:00:00'],'end_date':['2021-04-01 00:11:00','2021-05-01 00:06:00', '2021-05-03 00:00:00'], 'eventname':['birthday', 'wedding', 'birthday'] })
df_B = pd.DataFrame({'event_date':['2021-04-01 00:06:00','2021-05-01 00:03:00', '2021-05-04 00:00:00'],'price':[100,200,500]})
df_A['end_date'] = pd.to_datetime(df_A.end_date)
df_A['start_date'] = pd.to_datetime(df_A.start_date)
df_B['event_date'] = pd.to_datetime(df_B.event_date)
df_A
start_date end_date eventname
0 2021-04-01 2021-04-01 00:11:00 birthday
1 2021-05-01 2021-05-01 00:06:00 wedding
2 2021-05-02 2021-05-03 00:00:00 birthday
df_B
event_date price
0 2021-04-01 00:06:00 100
1 2021-05-01 00:03:00 200
2 2021-05-04 00:00:00 500
我想加入它们,使 event_date 列位于 df_A 的 start_date 和 end_date 列之间。这是我的代码:
df_A.index = pd.IntervalIndex.from_arrays(df_A['start_date'],df_A['end_date'],closed='both')
df_B['start_date'] = df_B['event_date'].apply(lambda x : df_A.iloc[df_A.index.get_loc(x)]['start_date'])
df_B
但是,由于 df_B 的 event_date 列上的某些值不在 df_A 中的任何 start_date 和 end_date 列之间,我得到了一个键错误。
这是我的预期输出:
event_date price start_date
0 2021-04-01 00:06:00 100 2021-04-01
1 2021-05-01 00:03:00 200 2021-05-01
2 2021-05-04 00:00:00 500 NaN
我尝试使用交集,但只有当值完全相等时才有效。我该怎么做?
【问题讨论】:
-
如果两个数据帧不是太大,你可以
merge给它们分配key=1,然后在合并的数据帧上应用逻辑。 -
你为什么要标记 SQL ?如果您使用 SQL,请同时标记您的数据库系统