如何用Python Pandas按不同列的相同值合并行?
用Pandas实现配对行合并
步骤1:构造原始DataFrame
先将你给出的原始数据整理为Pandas可处理的结构:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Id': ['1', '2', 'A', 'B'], 'Col1': ['a', 'c', 'b', 'd'], 'Col2': [np.nan, np.nan, np.nan, np.nan], 'Paired_Id': ['A', 'B', '1', '2'] })
步骤2:自连接匹配配对行
通过merge方法将DataFrame与自身连接,用主行的Paired_Id匹配对应配对行的Id:
merged = df.merge(df, left_on='Paired_Id', right_on='Id', suffixes=('', '_pair'))
suffixes参数用来区分原始列和配对行的列,避免重名冲突。
步骤3:提取并整理目标列
从连接结果中筛选需要的字段,将配对行的Col1重命名为目标列Col2:
result = merged[['Id', 'Col1', 'Col1_pair', 'Paired_Id']].rename(columns={'Col1_pair': 'Col2'})
步骤4:过滤重复配对行
只保留每组配对中的主行(这里以Id为数字的行作为主行),避免重复数据:
result = result[result['Id'].str.isdigit()].reset_index(drop=True)
最终得到的result就是你需要的输出:
Id Col1 Col2 Paired_Id 0 1 a b A 1 2 c d B
通用化处理说明
如果主行和配对行的标识不是数字/字母的区别,可以通过判断配对关系过滤,比如只保留Id < Paired_Id的行(需确保类型支持比较),保证每组配对仅保留一行:
result = result[result['Id'] < result['Paired_Id']].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

