按轴0的单列合并多个Pandas DataFrames的技术实现
合并多个Pandas DataFrame并保留唯一行记录
嘿,这个合并需求很清晰,我来给你一个简洁高效的解决方案,完美匹配你的要求!
步骤1:导入必要的模块
首先得导入Pandas和用于串联合并操作的reduce工具:
import pandas as pd from functools import reduce
步骤2:定义你的DataFrames
先把你给出的几个DataFrame定义好:
df_b3 = pd.DataFrame({'P': ['l1','l3'], 'b3': ['+','+']}, index=[0,1]) df_ka = pd.DataFrame({'P': ['l1','l2','l3'], 'ka': ['+','+','+']}, index=[0,1,2]) df_kb = pd.DataFrame({'P': ['l2','l3'], 'kb': ['+','+']}, index=[0,1])
步骤3:批量合并所有DataFrame
把所有要合并的DataFrame放进一个列表,然后用reduce逐个执行外连接(outer join)——外连接能确保所有P列的条目都被保留,不管它出现在哪个原始DataFrame里:
# 把所有DataFrame存入列表 dfs = [df_b3, df_ka, df_kb] # 批量合并,以P列为关联键,保留所有行 merged_df = reduce(lambda left, right: pd.merge(left, right, on='P', how='outer'), dfs)
步骤4:(可选)清理空值
合并后,那些在某个DataFrame里没有对应P条目的列会显示NaN,如果你想把这些空值替换成空字符串或者其他标记,可以用fillna:
merged_df = merged_df.fillna('')
最终结果
执行完上面的代码后,你会得到这样的结果:
P b3 ka kb 0 l1 + + 1 l3 + + + 2 l2 + +
这个结果包含了所有输入列(P、b3、ka、kb),并且每一行都是唯一的P条目记录。
为什么这么做?
reduce帮我们避免了重复写多次merge代码,不管你有多少个DataFrame都能轻松处理- **外连接(how='outer')**确保不会丢失任何
P列的条目,完美覆盖所有原始数据 - 合并后的结果天然就是唯一行(每个
P只出现一次),如果你担心有特殊情况,也可以加一行merged_df = merged_df.drop_duplicates(subset='P', keep='first')来双重确保唯一性
内容的提问来源于stack exchange,提问作者rookie099
相关产品推荐
相关产品推荐

