正如标题所示,我想合并两个 Pandas 数据集,其中两个数据集都有重复的键,但也考虑其他列(在本例中为日期列)上的特定条件。我有这两个数据集:
数据集A:
身份证 | 事实 | 等级 | 事实日期 |
---|---|---|---|
1 | 酗酒 | 专家 | 2024-01-23 |
1 | 焦虑症 | 专家 | 2024-01-23 |
1 | 抑郁症 | 顾问 | 2024-02-15 |
数据集B:
身份证 | 用户 | 行动日期 |
---|---|---|
1 | AA | 2024-01-23 |
1 | BB | 2024-02-17 |
我想这样组合:
数据集AB:
身份证 | 事实 | 等级 | 事实日期 | 用户 | 行动日期 |
---|---|---|---|---|---|
1 | 酗酒 | 专家 | 2024-01-23 | AA | 2024-01-23 |
1 | 焦虑症 | 专家 | 2024-01-23 | AA | 2024-01-23 |
1 | 抑郁症 | 顾问 | 2024-02-15 | BB | 2024-02-17 |
我想合并事实日期不晚于操作日期的行。但正如您在合并数据库的第三行中看到的那样,它将采用最接近的事实日期的数据(因此 BB 而不是 AA,即使 1 月 23 日早于 2 月 17 日)。
如果大萧条的事实日期是2月18日(2月17日之后),那么通过左侧合并,它将返回第三个表的空信息。
数据集 AB(如果抑郁症的事实日期为 2 月 18 日):
身份证 | 事实 | 级别 | 事实日期 | 用户 | 行动日期 |
---|---|---|---|---|---|
1 | 酗酒 | 专家 | 2024-01-23 | AA | 2024-01-23 |
1 | 焦虑症 | 专家 | 2024-01-23 | AA | 2024-01-23 |
1 | 抑郁症 | 顾问 | 2024-02-18 |
任何帮助表示赞赏!
how='left'
;User
和 Action date
的值,其中 Action Date >= Fact Date
;Action date
的最新日期。df = pd.merge(df1, df2, on=["ID"], how="left")
df[["Action date", "User"]] = df.loc[
df["Action date"] >= df["Fact date"], ["Action date", "User"]
]
df = df.sort_values("Action date").drop_duplicates(["ID", "Fact", "Level", "Fact date"])
对于
Fact == Depression
和 Fact Date == 2024-02-15
:
ID Fact Level Fact date User Action date
0 1 Alcohol abuse Specialist 2024-01-23 AA 2024-01-23
2 1 Anxiety disorder Specialist 2024-01-23 AA 2024-01-23
5 1 Depression Advisor 2024-02-15 BB 2024-02-17
对于
Fact == Depression
和 Fact Date == 2024-02-18
:
ID Fact Level Fact date User Action date
0 1 Alcohol abuse Specialist 2024-01-23 AA 2024-01-23
2 1 Anxiety disorder Specialist 2024-01-23 AA 2024-01-23
4 1 Depression Advisor 2024-02-18 NaN NaT