gpt4 book ai didi

python - 当一个数据框中只有某些日期存在于其他数据框中的其他两个日期之间时,如何连接两个数据框?

转载 作者:行者123 更新时间:2023-12-05 01:54:56 26 4
gpt4 key购买 nike

我有两个数据框:

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_dateend_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 列上的某些值不位于 start_dateend_date 之间df_A 中的列。

这是我的预期输出:

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

我尝试使用交集,但只有当值完全相等时才有效。我该怎么做?

最佳答案

如果您的start_dateend_date 不重叠,请创建一个区间索引并合并您的两个数据帧:

bins = pd.IntervalIndex.from_arrays(df_A['start_date'], 
df_A['end_date'],
closed='both')

out = df_B.assign(interval=pd.cut(df_B['event_date'], bins)) \
.merge(df_A.assign(interval=bins), on='interval', how='left')

print(out[['event_date', 'price', 'start_date']])

# Output:
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 NaT

关于python - 当一个数据框中只有某些日期存在于其他数据框中的其他两个日期之间时,如何连接两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70436247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com