基于CODE_STD合并DataFrame,如何保留df1的58行结构?
解决DataFrame合并后行数超出预期的问题
问题原因
你使用pd.merge(..., how='outer')会保留两个DataFrame中所有CODE_STD的记录,当某一个CODE_STD在df1或df2中存在多条匹配时,会生成笛卡尔积,最终导致合并后的行数远超df1的58行。
正确合并方法
方法1:使用左连接(Left Join)
左连接会严格保留df1的所有行,仅匹配df2中对应CODE_STD的记录,无匹配的ASSET_ID2会填充为NaN,确保合并后行数与df1一致:
import pandas as pd merged_df = pd.merge(df1, df2, on='CODE_STD', how='left')
方法2:先去重再左连接(针对df2存在重复CODE_STD的情况)
如果df2中同一个CODE_STD对应多条ASSET_ID2记录,直接左连接仍会产生重复行。此时需先对df2按CODE_STD去重,确保每个CODE_STD仅保留一条记录(示例保留首次出现的记录):
# 对df2去重,保留每个CODE_STD的第一条记录 df2_unique = df2.drop_duplicates(subset='CODE_STD', keep='first') # 执行左连接 merged_df = pd.merge(df1, df2_unique, on='CODE_STD', how='left')
验证结果
处理后的merged_df将包含58行,同时保留ASSET_ID和ASSET_ID2两列,完全符合需求。
内容的提问来源于stack exchange,提问作者Minh Huynh
相关产品推荐
相关产品推荐

