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

Pandas:基于答案出现次数及线索差异条件筛选DataFrame行

问题描述

我正在处理一个填字游戏数据集,包含id、clue、answer、answer_len、data、source、answer_occurrencies这些字段(示例数据行:1222528, Brick floors of fireplaces, HEARTHS, 7.0, 2015-01-01, pk, 1)。

我的需求是提取满足以下条件的行:

  • 答案(answer)的总出现次数超过5次
  • 且这些答案对应不同的线索(注:answer_occurrencies字段代表同一线索下该答案的出现次数)

我已经尝试用value_counts()统计了各answer的出现次数,移除了出现次数少于5次的答案,得到了出现次数≥5的答案集合fives,代码如下:

dropped_labels = []
for key, val in train_data["answer"].value_counts().items():
    if val < 5:
        dropped_labels.append(key)
fives = train_data["answer"].value_counts().drop(labels=dropped_labels)
>>>fives
ONE    77
ART    72
ERA    71
ARIA   67
TEE    60
..
DIOR    5
BIRTH   5
SIEVE   5
IONE    5
BESO    5

但现在我卡在了如何从train_data中筛选出answer字段属于fives集合的行这一步,尝试的方法都失败了。作为Python新手,想请教有没有合适的Pandas内置函数可以解决这个问题?


解决方案

别担心,这其实是Pandas里很常见的筛选场景,有几种简洁的方法可以解决:

方法1:用isin()匹配答案集合

你已经得到了fives的索引(也就是符合条件的answer值),直接用isin()方法就能快速筛选原数据:

# 获取fives中的所有answer值(即fives的索引)
valid_answers = fives.index
# 筛选train_data中answer在valid_answers里的行
filtered_data = train_data[train_data["answer"].isin(valid_answers)]

如果要进一步保留每个answer对应的不同线索,可以在结果上添加去重操作:

# 去除重复的(answer, clue)组合,保留每个答案对应的不同线索
filtered_data_unique = filtered_data.drop_duplicates(subset=["answer", "clue"])

方法2:一步到位(更高效)

其实你可以不用先手动生成fives集合,直接用groupby()+transform()来标记符合条件的行,效率更高,还能直接完成后续的去重需求:

# 计算每个answer的总出现次数,添加为临时列
train_data["answer_total_count"] = train_data.groupby("answer")["answer"].transform("count")
# 筛选总次数≥5的行,同时去重保留不同线索
filtered_data = train_data[train_data["answer_total_count"] >= 5].drop_duplicates(subset=["answer", "clue"])

这种方法不需要额外循环和生成中间集合,尤其适合处理较大的数据集。

补充说明

如果你的需求还涉及answer_occurrencies字段的限制(比如只保留同一线索下该答案出现1次的行),可以在筛选条件里追加对应规则:

filtered_data = train_data[
    (train_data["answer_total_count"] >= 5) & 
    (train_data["answer_occurrencies"] == 1)  # 示例:仅保留同一线索下出现1次的行
].drop_duplicates(subset=["answer", "clue"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:38:10