如何在Python中基于两列值合并顺序打乱的两个DataFrame?
解决两个DataFrame基于两列匹配关联的问题
这个需求在日常数据处理里挺常见的,用Python的pandas库就能轻松搞定,我给你一步步拆解操作方法:
核心思路
因为两个DataFrame的Col1和Col2是唯一且完全匹配的组合(只是排列顺序不同),我们可以把这两列作为匹配的“键”,通过合并操作将表2的Col3关联到表1对应的行上,最终得到和表1顺序一致、新增Col3的新表。
具体操作步骤
1. 导入pandas库
首先确保你已经安装了pandas,然后导入它:
import pandas as pd
2. 构造示例数据(模拟你的场景)
我先造两个和你描述一致的DataFrame,方便你对照理解:
# 表1:仅包含Col1和Col2,行顺序固定 df1 = pd.DataFrame({ 'Col1': ['A', 'B', 'C', 'D'], 'Col2': [1, 2, 3, 4] }) # 表2:Col1、Col2顺序打乱,新增需要关联的Col3列 df2 = pd.DataFrame({ 'Col1': ['C', 'A', 'D', 'B'], 'Col2': [3, 1, 4, 2], 'Col3': ['Apple', 'Banana', 'Cherry', 'Date'] })
3. 执行匹配合并
用pd.merge()函数,指定以Col1和Col2作为匹配键,选择inner内连接(因为两个表的键组合完全一致,内连接会保留所有表1的行并精准匹配对应Col3):
# 合并后会自动沿用表1的行顺序 merged_df = pd.merge(df1, df2, on=['Col1', 'Col2'], how='inner')
4. 查看最终结果
打印merged_df就能看到符合要求的新表:
Col1 Col2 Col3 0 A 1 Banana 1 B 2 Date 2 C 3 Apple 3 D 4 Cherry
额外注意事项
- 如果你的数据里
Col1+Col2的组合可能存在重复,可以先检查并去重:# 检查表1是否有重复组合 print("表1是否有重复组合:", df1.duplicated(subset=['Col1', 'Col2']).any()) # 检查表2是否有重复组合 print("表2是否有重复组合:", df2.duplicated(subset=['Col1', 'Col2']).any()) # 若有重复,先对表2去重(保留第一个出现的组合) df2_clean = df2.drop_duplicates(subset=['Col1', 'Col2'], keep='first') - 如果需要严格保留表1的所有行(哪怕表2里没有对应组合),可以把
how='inner'改成how='left',此时表1中找不到匹配的行,Col3会显示为NaN。
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

