【发布时间】:2021-05-01 02:02:41
【问题描述】:
我正在尝试根据重叠间隔“合并”两个 Dataframe,如下所示:
数据集 1
| start_date | end_date | field1 |
|---|---|---|
| 2020-01-01 | 2020-06-30 | A |
| 2020-07-01 | 2020-12-31 | B |
数据集 2
| start_date | end_date | field2 |
|---|---|---|
| 2020-01-01 | 2020-04-30 | D |
| 2020-05-01 | 2020-08-31 | E |
| 2020-09-01 | 2020-12-31 | F |
组合数据集
| start_date | end_date | field1 | field2 |
|---|---|---|---|
| 2020-01-01 | 2020-04-30 | A | D |
| 2020-05-01 | 2020-06-30 | A | E |
| 2020-07-01 | 2020-08-31 | B | E |
| 2020-09-01 | 2020-12-31 | B | F |
代码是python,示例如下
import pandas as pd
df1 = pd.DataFrame([['2020-01-01','2020-06-30','A'],
['2020-07-01','2020-12-31','B']],
columns = ['start_date', 'end_date', 'field1'])
df2 = pd.DataFrame([['2020-01-01','2020-04-30','D'],
['2020-05-01','2020-08-31','E'],
['2020-09-01','2020-12-31','F']],
columns = ['start_date', 'end_date', 'field2'])
expected_output = pd.DataFrame([['2020-01-01','2020-04-30','A','D'],
['2020-05-01','2020-06-30','A','E'],
['2020-07-01','2020-08-31','B','E'],
['2020-09-01','2020-12-31','B','F']],
columns = ['start_date', 'end_date','field1', 'field2'])
我真的尝试过想办法做到这一点,但我必须说我的页面是空白的......非常感谢您的任何建议!
【问题讨论】:
-
@Andreas 感谢您的分享,但这是一个稍微不同的问题。
-
@Cambyst 您可以做的是将 df1 中的每个日期范围(开始-结束)与 df2 中的每个日期范围进行比较,并找到相交的日期范围(记住 field1 和 field2 的值)。每个非空交集都成为 expected_output 中的一行。我现在没有时间为此创建一个真正的答案。但也许这可以为您或其他人指明正确的方向。
-
@jch 我的解决方案与您的想法相同。在您发表评论时,我正在对代码进行最后的美化。