如何基于items列匹配并比较score值合并两个Pandas DataFrame
解决方案
先给两个DataFrame添加来源标识列,再合并数据集,最后按items分组保留score最高的行,具体步骤如下:
1. 构建并标记原始数据
import pandas as pd # 构建df1并添加来源标记 df1 = pd.DataFrame({ 'sample': ['a', 'b', 'c'], 'items': ['p1', 'p2', 'p3'], 'score': [0.9, 0.8, 0.6] }) df1['df_name'] = 'df1' # 构建df2并添加来源标记 df2 = pd.DataFrame({ 'sample': ['d', 'e', 'f'], 'items': ['p2', 'p3', 'p4'], 'score': [0.75, 0.7, 0.65] }) df2['df_name'] = 'df2'
2. 合并并筛选目标行
# 合并两个DataFrame combined_df = pd.concat([df1, df2]) # 按score降序排序,保留每个items组中score最大的行 result_df = combined_df.sort_values('score', ascending=False).drop_duplicates('items').sort_index() # 调整列顺序,匹配期望输出格式 result_df = result_df[['sample', 'items', 'score', 'df_name']]
最终输出
执行上述代码后,result_df的内容与期望一致:
sample items score df_name 0 a p1 0.9 df1 1 b p2 0.8 df1 4 e p3 0.7 df2
关键逻辑说明
- 提前添加
df_name列,确保合并后能追溯数据来源 - 降序排序后用
drop_duplicates('items'),可以高效保留每个items对应的最高分记录 - 最后调整索引和列顺序,让输出格式完全匹配需求
内容的提问来源于stack exchange,提问作者aminulpalash
相关产品推荐
相关产品推荐

