如何基于参考DataFrame的ID自动替换主DataFrame的公司名称
基于ID匹配替换DataFrame中的Company列名称
方法一:使用merge合并匹配
适合需要保留所有原始数据的场景,通过左连接将参考表的Company名称匹配到主表:
import pandas as pd # 构造主DataFrame df1 = pd.DataFrame({ 'Company': ['A', 'A', 'B', 'B', 'C'], 'ID': [1234, 1478, 5678, 3333, 2468], 'Charge': [100, 150, 100, 200, 200] }) # 构造参考DataFrame df_ref = pd.DataFrame({ 'Company': ['Alpha', 'Alpha', 'Beta', 'Beta', 'Gamma'], 'ID': [1234, 1478, 5678, 3333, 2468] }) # 左连接匹配,保留主表所有行 merged_df = df1.merge(df_ref, on='ID', suffixes=('_old', '')) # 移除旧的Company列,整理列顺序 final_df = merged_df.drop('Company_old', axis=1)[['Company', 'ID', 'Charge']] print(final_df)
方法二:创建ID-Company映射字典(高效处理大数据)
如果参考表中每个ID对应唯一的Company名称,可以先构建映射字典,再用map快速替换,这种方法处理大规模数据时效率更高:
import pandas as pd # 构造数据(同上) df1 = pd.DataFrame({ 'Company': ['A', 'A', 'B', 'B', 'C'], 'ID': [1234, 1478, 5678, 3333, 2468], 'Charge': [100, 150, 100, 200, 200] }) df_ref = pd.DataFrame({ 'Company': ['Alpha', 'Alpha', 'Beta', 'Beta', 'Gamma'], 'ID': [1234, 1478, 5678, 3333, 2468] }) # 构建ID到Company的映射字典(去重确保每个ID对应唯一值) id_to_company = df_ref.drop_duplicates(subset='ID').set_index('ID')['Company'].to_dict() # 替换主表的Company列 df1['Company'] = df1['ID'].map(id_to_company) print(df1)
两种方法都能得到你期望的结果,其中方法二更适合处理大规模数据,因为map的时间复杂度更低。
内容的提问来源于stack exchange,提问作者CuRious Coder
相关产品推荐
相关产品推荐

