将重复键上的 pandas 数据框与其他列上的某些条件合并

问题描述 投票:0回答:1

正如标题所示,我想合并两个 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

任何帮助表示赞赏!

python pandas date merge conditional-statements
1个回答
0
投票
  1. 将数据框与
    how='left'
    ;
  2. 合并
  3. 仅保留
    User
    Action date
    的值,其中
    Action Date >= Fact Date
    ;
  4. 对行进行排序后删除重复项以保留
    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
© www.soinside.com 2019 - 2024. All rights reserved.