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

如何筛选RCID重复且组内至少一条CUSIP非缺失的记录?

筛选含非缺失CUSIP的重复RCID组

问题背景

现有包含RCID和CUSIP列的数据集,已通过以下代码筛选出所有RCID重复的观测值:

fin_rcid_dup = df['rcid'].duplicated(keep=False)
filtered_df = df[fin_rcid_dup]

数据集如下:

IndexRCIDCUSIP
1478923.
2346422.
3362736.
43627364637468
5362736.
6673253.
7673253.
8362736.

需要进一步筛选:仅保留同一RCID组中至少有一条记录CUSIP非缺失的组,最终保留索引3、4、5、8的记录,排除索引6、7的记录(该组所有CUSIP均为.,即缺失)。此前尝试的代码仅筛选出索引4的记录,无法满足需求。

解决方案

核心思路是先标记重复RCID的记录,再通过分组判断每组是否存在非缺失CUSIP,最终保留符合条件的组内所有记录:

完整代码

import pandas as pd

# 先将数据中的缺失标记`.`转为pandas可识别的NA
df['cusip'] = df['cusip'].replace('.', pd.NA)

# 1. 筛选所有RCID重复的观测值
is_duplicate_rcid = df['rcid'].duplicated(keep=False)
duplicate_df = df[is_duplicate_rcid]

# 2. 标记每组是否存在非缺失的CUSIP,筛选符合条件的记录
has_valid_cusip = duplicate_df.groupby('rcid')['cusip'].transform(lambda group: group.notna().any())
final_result = duplicate_df[has_valid_cusip]

代码解释

  1. 缺失值转换:将数据中的.替换为pd.NA,让pandas能正确识别缺失值。
  2. 筛选重复RCID:用duplicated(keep=False)标记所有重复的RCID记录,得到仅包含重复RCID的数据集。
  3. 分组判断:使用groupby.transform对每个RCID组进行判断,group.notna().any()会返回该组是否存在至少一个非缺失的CUSIP,生成与原数据集长度一致的布尔数组。
  4. 最终筛选:用上述布尔数组过滤,保留所有属于“存在非缺失CUSIP”的RCID组的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:54:51