我有数据框 1:
Hotel DateFrom DateTo Room
BBB 2019-10-29 2020-03-27 DHS
BBB 2020-03-28 2020-10-30 DHS
BBB 2020-10-31 2021-03-29 DHS
BBB 2021-03-30 2099-01-01 DHS
和数据框 2:
Hotel DateFrom DateTo Room Food
BBB 2020-03-01 2020-04-24 DHS A
BBB 2020-04-25 2020-05-03 DHS B
BBB 2020-05-04 2020-05-31 DHS C
BBB 2020-06-01 2020-06-22 DHS D
BBB 2020-06-23 2020-08-26 DHS E
BBB 2020-08-27 2020-11-30 DHS F
我需要检查 df1 中的每一行以及 df1_DateFrom 是否在 df2_DateFrom 和 df2_DateTo 之间。然后我需要将食物代码从 df2 获取到 df1 中的新列或如下所示的新 df3。
结果将如下所示:
df3:
Hotel DateFrom DateTo Room Food
BBB 2019-10-29 2020-03-27 DHS
BBB 2020-03-28 2020-10-30 DHS A
BBB 2020-10-31 2021-03-29 DHS F
BBB 2021-03-30 2099-01-01 DHS
我非常感谢任何对此的帮助。我对 Pandas 还算陌生,仍在学习中,我必须说这对我来说有点复杂。
最佳答案
您可以进行交叉合并和查询:
# recommend dealing with datetime type:
df1['DateFrom'],df1['DateTo'] = pd.to_datetime(df1['DateFrom']),pd.to_datetime(df1['DateTo'])
df2['DateFrom'],df2['DateTo'] = pd.to_datetime(df2['DateFrom']),pd.to_datetime(df2['DateTo'])
new_df = (df1.reset_index().merge(df2, on=['Hotel','Room'],
how='left', suffixes=['','_'])
.query('DateFrom_ <= DateFrom <= DateTo_')
)
df1['Food'] = new_df.set_index('index')['Food']
输出:
Hotel DateFrom DateTo Room Food
0 BBB 2019-10-29 2020-03-27 DHS NaN
1 BBB 2020-03-28 2020-10-30 DHS A
2 BBB 2020-10-31 2021-03-29 DHS F
3 BBB 2021-03-30 2099-01-01 DHS NaN
关于Python Pandas 如何将一个数据帧中的日期与另一个数据帧中的日期进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62025047/