当前位置: 首页 > 面试题库 >

基于两个其他日期之间的日期合并两个数据框,但没有公共列

武成和
2023-03-14
问题内容

我有两个数据框需要根据日期值是否适合其他两个日期之间进行合并。基本上,我需要B.event_dateA.start_date和之间执行外部联接A.end_date。似乎合并和连接总是假定有一个公共列,在这种情况下,我没有。

    A                           B
    start_date  end_date        event_date  price
0   2017-03-27  2017-04-20  0   2017-01-20  100
1   2017-01-10  2017-02-01  1   2017-01-27  200

Result 
    start_date  end_date        event_date  price
0   2017-03-27  2017-04-20  
1   2017-01-10  2017-02-01      2017-01-20  100
2   2017-01-10  2017-02-01      2017-01-27  200

问题答案:

创建日期时间的数据和格式:

df_A = pd.DataFrame({'start_date':['2017-03-27','2017-01-10'],'end_date':['2017-04-20','2017-02-01']})
df_B = pd.DataFrame({'event_date':['2017-01-20','2017-01-27'],'price':[100,200]})

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 = df_A.assign(key=1)
df_B = df_B.assign(key=1)
df_merge = pd.merge(df_A, df_B, on='key').drop('key',axis=1)

筛选出在开始日期和结束日期之间不符合事件日期条件的记录:

df_merge = df_merge.query('event_date >= start_date and event_date <= end_date')

加入原始日期范围表并放下关键列

df_out = df_A.merge(df_merge, on=['start_date','end_date'], how='left').fillna('').drop('key', axis=1)

print(df_out)

输出:

              end_date           start_date           event_date price
0  2017-04-20 00:00:00  2017-03-27 00:00:00                           
1  2017-02-01 00:00:00  2017-01-10 00:00:00  2017-01-20 00:00:00   100
2  2017-02-01 00:00:00  2017-01-10 00:00:00  2017-01-27 00:00:00   200


 类似资料:
  • 问题内容: 我有这个模型: 和存储库为 我想做的是,我将传递一个日期,并需要检查该日期在和之间(例如,我将9月30日作为日期传递,并且需要查找9月30日在其和之间的所有条目) 像什么? 问题答案: 您应该看一下参考文档。很好解释。 就您而言,我认为您不能在两者之间使用,因为您需要传递两个参数 之间 -findByStartDateBetween…其中x.startDate在?1和?2之间 根据您的

  • 问题内容: 我有两个这样的表: 表格1 表2 我想从 Table1中 选择并插入 Table2中 。 例如: 在表1中,我有这个 在表2中,我想要这个 带有样本数据的表结构 问题答案: 感谢您的架构。它使处理您的问题变得容易。我对您的架构进行了一些更改以利用auto_increment 在这里,我在emp_leave_daywise表上添加了唯一约束,因为id整数上的主键不能确保记录不重复。 em

  • 我的桌子有这样的结构 如何在mysql中获取上述数据的两个日期之间的事件(日期比较与年份无关)。例如,如果start_date是2014-05-01,结束日期是2014-05-20,则输出应该是 更新:如果同一个人的结婚日期和出生日期都在提供的日期范围内,则输出应包含该人的两列 (抱歉我的英语不好)

  • 问题内容: 查看两个日期之间有多少整天的最短方法是什么?这就是我现在正在做的。 问题答案: 假设您确实有两个日期对象,则可以从另一个对象中减去一个,然后查询结果对象的天数: 它也适用于日期时间-我认为它会四舍五入到最近的日期:

  • 问题内容: 我有以下代码: 日期,开始和结束都是格式为1/1的变量。我应该怎么做才能打印出正确的结果?我尝试将日期设置为10/2,开始设置为3/14,结束设置为11/7,并且打印“否!”,这表示运行不正确。我想必须将它们格式化为日期格式,然后进行比较。 问题答案: 由于您仍然不满意,因此我有另一个答案。不使用日期时间和年份。 它仅使用内置元组并对其进行比较: 您可以轻松创建如下这样的元组:

  • 问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案: