我正在尝试通过购买组 ID 键连接两个数据帧。第一个数据框包含购买组中每个客户的购买组代码、客户 ID 和开始/结束日期。
头部看起来像:
Buying_group, Customer_ID, BG_Start_Dt, BG_End_Dt
123 0001 2020-1-1 2025-1-1
123 0002 2021-1-1 2024-1-1
132 0033 2019-1-1 2023-1-1
132 0044 2019-1-1 2023-1-1
另一个包含采购组代码、合同编号、客户 ID 和合同的开始/结束日期。
头部看起来像:
Buying_group, Contract, ContractStDt, ContractEnDt, Customer_ID
123 1 2020-1-1 2025-1-1 0001
123 2 2021-1-1 2024-1-1 0002
156 4 2019-1-1 2023-1-1 0003
156 4 2019-1-1 2023-1-1 0004
我正在尝试加入每个 df,所以我有一个主 df,它结合了第一个 df 的购买组日期。我遇到的问题是,当我通过 Buying_group 键对两个 df 进行外部或内部连接时,生成的 df 有两列客户 ID:
Customer_IDx, Customer_IDy
数据框如下所示:
Buying_group, Contract, ContractStDt, ContractEnDt, BG_Start_Dt, BG_End_Dt Customer_IDx, Customer_IDy
123 1 2020-1-1 2025-1-1 2020-1-1 2025-1-1 0001 0001
123 2 2021-1-1 2024-1-1 2021-1-1 2024-1-1 0002 0002
156 4 2019-1-1 2023-1-1 2022-1-1 2029-1-1 null 0003
156 4 2019-1-1 2023-1-1 2022-1-1 2029-1-1 null 0004
132 5 2019-1-1 2023-1-1 2019-1-1 2023-1-1 0033 null
132 5 2019-1-1 2023-1-1 2019-1-1 2023-1-1 0044 null
这里的问题是每一行都对应于每个客户的一个唯一合同,合并后的数据框需要为每个唯一的客户 ID 分配一行。我对这些 SQL 类型连接真的很陌生,想知道是否有办法做到这一点。将每个加入的 DF 的两个客户 ID 列合并为一列,同时保留其唯一行。我尝试进行内连接和外连接,但结果相同。
理想的数据框应该是这样的:
Buying_group, Contract, ContractStDt, ContractEnDt, BG_Start_Dt, BG_End_Dt, Customer_ID
123 1 2020-1-1 2025-1-1 2020-1-1 2025-1-1 0001
123 2 2021-1-1 2024-1-1 2021-1-1 2024-1-1 0002
156 4 2019-1-1 2023-1-1 2022-1-1 2029-1-1 0003
156 4 2019-1-1 2023-1-1 2022-1-1 2029-1-1 0004
132 5 2019-1-1 2023-1-1 2019-1-1 2023-1-1 0033
132 5 2019-1-1 2023-1-1 2019-1-1 2023-1-1 0044
答案 0 :(得分:1)
试试这个
df_3 = pd.concat([df1,df2]).drop_duplicates(subset=['Buying_group','Customer_ID'],
keep="last").reset_index(drop=True)
df_3
输出
Buying_group Customer_ID BG_Start_Dt BG_End_Dt contract
0 132 00033 2019-1-1 2023-1-1 NaN
1 132 00044 2019-1-1 2023-1-1 NaN
2 123 0001 2020-1-1 2025-1-1 1.0
3 123 0002 2021-1-1 2024-1-1 2.0
4 156 0003 2019-1-1 2023-1-1 4.0
5 156 0004 2019-1-1 2023-1-1 4.0