如何在pandas合并DataFrame时仅保留code_1的首次匹配结果?
解决方法
pd.merge() 本身没有内置参数能直接让你在合并时只保留每个code_1的首次匹配结果,但可以通过预处理右表的方式实现需求:提前对df_1做去重处理,只保留每个code_1的第一行数据,再执行左连接,就能直接得到每个code_1仅一行的匹配结果。
基础实现代码
# 先对df_1去重,保留每个code_1的首次出现条目 df_1_unique = df_1.drop_duplicates(subset=['code_1'], keep='first') # 基于去重后的df_1执行左连接 df_merge = pd.merge(df, df_1_unique, how="left", on=['code_1'])
进阶:按优先级保留特定行
如果df_1中同一code_1的重复行有优先级(比如需要保留最新数据),可以先排序再去重:
# 假设按date列降序排序,确保最新行排在前面 df_1_sorted = df_1.sort_values(by='date', ascending=False) # 去重保留每个code_1的第一行(即最新行) df_1_unique = df_1_sorted.drop_duplicates(subset=['code_1'], keep='first') # 执行左连接 df_merge = pd.merge(df, df_1_unique, how="left", on=['code_1'])
这样处理后,合并结果里每个code_1只会对应一行匹配数据,无需在合并后额外执行去重操作。
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

