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

如何使用Pandas筛选DataFrame的R_ID列仅保留与A_ID列共有值

正确实现代码

你要的效果不需要用关联操作,直接对R_ID列做条件匹配即可:

import pandas as pd
import numpy as np

# 构造原始DataFrame
data = {'A_ID': ['1E2', '1E3', '1E4', '1E5'], 'R_ID': ['1E7',[np.nan],[np.nan],"1E4",]}
df = pd.DataFrame(data)

# 处理R_ID中部分值为列表包裹的问题(若实际数据无此特殊格式可跳过这一步)
df['R_ID'] = df['R_ID'].apply(lambda x: x[0] if isinstance(x, list) and len(x) == 1 else x)

# 仅保留R_ID中存在于A_ID列的值,其余替换为NaN
df['R_ID'] = df['R_ID'].where(df['R_ID'].isin(df['A_ID']), np.nan)

print(df)

运行后输出和你期望的结果完全一致,原有行索引、A_ID列完全不变。

原方案错误原因

  • 第一种merge方案:内连接的逻辑是保留两个表中满足匹配条件的行,会直接过滤掉不匹配的行,完全不符合你「保留所有原有行、仅改列值」的需求;同时你同时指定了right_on和right_index参数,逻辑冲突才触发类型报错。
  • 第二种concat方案:concat的inner join是按行索引取交集,你代码中用了未定义的dataset_A_ID、dataset_R_ID变量,就算变量名修正,也没有做值匹配的逻辑,自然得不到正确结果。

内容的提问来源于stack exchange,提问作者DanielSchloß

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:54:01