如何基于指定列将一个DataFrame的列追加到另一个DataFrame?
问题:基于Unique列匹配合并DataFrame列
我有两个DataFrame:
df1
Srno, Unique, %count, TotalCount 1, A , 35%, 89 2, B , 40%, 65 3, C , 42%, 42 4, D , 15%, 80
df2
Srno, Unique, %count, TotalCount, Values 1, B , , ,40 2, A , , ,45 3, D , , ,56 4, C , , ,60
我需要基于Unique列,将df1中的%count和TotalCount列匹配到df2中。
我尝试了这段代码,但没得到预期结果:
df2['%count'] = df1[df1['Unique'].isin(df2['Unique'])]['%count'].values
期望输出:
Srno, Unique, %count, TotalCount, Values 1, B , 40% , 65 ,40 2, A , 35% , 89 ,45 3, D , 15% , 80 ,56 4, C , 42% , 42 ,60
可复现的代码示例:
import pandas as pd df1 = pd.DataFrame( { 'Srno': [1, 2, 3, 4], 'Unique': ['A', 'B', 'C', 'D'], r'%count': ['35%', '40%', '42%', '15%'], 'TotalCount': [89, 65, 42, 80], } ) df2 = pd.DataFrame( { 'Srno': [1, 2, 3, 4], 'Unique': ['B', 'A', 'D', 'C'], r'%count': ['', '', '', ''], 'TotalCount': ['', '', '', ''], 'Values': [40, 45, 56, 60], } ) expected_output = pd.DataFrame( { 'Unique': ['B', 'A', 'D', 'C'], r'%count': ['40%', '35%', '15%', '42%'], 'TotalCount': [65, 89, 80, 42], 'Values': [40, 45, 56, 60], } )
解决方法
你之前的代码问题在于,isin仅筛选出df1中存在于df2的行,但未按df2的Unique顺序匹配,导致赋值时顺序错位。以下两种方法可以解决问题:
方法1:使用merge(推荐)
直接基于Unique列合并,保留df2原有结构与顺序:
# 提取df1中需要匹配的列 df1_subset = df1[['Unique', '%count', 'TotalCount']] # 合并到df2,保留df2的所有行 df2 = df2.drop(['%count', 'TotalCount'], axis=1).merge(df1_subset, on='Unique', how='left')
方法2:使用map
通过字典映射实现精准匹配:
# 构建Unique到对应列的映射字典 count_map = df1.set_index('Unique')['%count'].to_dict() total_map = df1.set_index('Unique')['TotalCount'].to_dict() # 赋值到df2 df2['%count'] = df2['Unique'].map(count_map) df2['TotalCount'] = df2['Unique'].map(total_map)
两种方法都能得到预期输出,merge适合复杂多列匹配场景,map则更轻量化。
内容的提问来源于stack exchange,提问作者Chinmay
相关产品推荐
相关产品推荐

