Python Pandas 如何将一个数据帧中的日期与另一个数据帧中的日期进行比较?

标签 python pandas dataframe

我有数据框 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/

相关文章:

python - 按可变长度在python中格式化

python - 如何将 dataframe pandas 中的 0 替换为 null 值?

python - 适合 Pandas df 的 LabelEncoder 顺序

python - 使用套接字访问本地主机网站。错误

python - 我无法在 ubuntu 上运行 conda 命令/激活环境?

pandas - 如何将函数作为参数应用于多个 pandas 列?

python - 将 Julia 数据框转换为 Python Pandas 数据框

python - 如何在pandas数据框中的 `convert_objects`中产生异常

r - 现有功能可查找缺失和完整案例的数量

python - 批处理文件重命名: zero padding time with regex?