You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于pid索引与score列匹配筛选Pandas中df2的目标行

没问题,这事儿好办!我们可以用Pandas的两种常用方法来实现你的需求,精准保留df2中与df1在pid索引和score值都匹配的行,下面给你详细拆解:

方法1:使用merge做内连接匹配

这是最直接的方案,通过将两个DataFrame在pid和score列上做内连接,自动筛选出两边都存在的匹配项:

import pandas as pd

# 先构造示例数据(方便你直接测试)
df1 = pd.DataFrame({
    'pid': [100, 101, 101, 200],
    'Name': ['Ram', 'Tony', 'Jack', 'Jill'],
    'score': [3, 2, 4, 6],
    'age': [36, 40, 56, 30]
}).set_index('pid')

df2 = pd.DataFrame({
    'pid': [100, 101, 101, 101, 200],
    'Name': ['Ram', 'Tony', 'John', 'Jack', 'Jill'],
    'score': [3, 2, 4, 9, 6],
    'age': [36, 40, 51, 32, 30]
}).set_index('pid')

# 执行内连接:只保留df2中与df1 pid和score都匹配的行
filtered_df2 = pd.merge(df2, df1[['score']], on=['pid', 'score'], how='inner')

print(filtered_df2)

输出结果如下:

Name  score  age
pid                 
100   Ram      3   36
101  Tony      2   40

小解释:

  • 我们只取df1的score列参与匹配(其他列不需要用来判断一致性)
  • how='inner'参数确保只保留两边完全匹配的行,刚好符合你的预期。
方法2:使用布尔索引+元组集合

如果你想更灵活控制筛选逻辑,可以把df1的pid和score组合成元组集合,再逐一检查df2的行是否符合:

# 创建df1的pid+score匹配元组集合
match_pairs = set(zip(df1.index, df1['score']))

# 筛选df2中符合条件的行
filtered_df2 = df2[df2.apply(lambda row: (row.name, row['score']) in match_pairs, axis=1)]

print(filtered_df2)

这个方法的输出和上面完全一致,适合需要自定义筛选规则的场景。

内容的提问来源于stack exchange,提问作者Jithesh Erancheri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:36