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

如何在DataFrame中筛选出被多种捕获方法捕获的鱼类TagNumber?

筛选被多种方法捕获的鱼类标签编号

问题说明

现有存储鱼类个体数据的DataFrame,包含TagNumber(标签编号)和MethodCaught(捕获方法)两列,需要提取所有被多种不同方法捕获的鱼类标签编号列表(示例中标签1、2符合条件,标签3仅用一种方法捕获,需排除)。

示例DataFrame构造

import pandas as pd

df = pd.DataFrame({
    'TagNumber': [1,1,2,2,3,3],
    'MethodCaught': ['A','B','B','A','A','A']
})

解决方案

方法1:分组筛选法

通过groupby按标签分组,结合nunique()统计每组不同捕获方法的数量,筛选出数量大于1的标签:

# 分组后筛选符合条件的标签,提取唯一值并转为列表
multi_method_tags = df.groupby('TagNumber').filter(
    lambda group: group['MethodCaught'].nunique() > 1
)['TagNumber'].unique().tolist()

print(multi_method_tags)  # 输出: [1, 2]

逻辑:filter保留所有包含多种捕获方法的分组数据,再提取唯一的TagNumber得到结果。

方法2:去重统计法

先去除同一标签同一捕获方法的重复记录,再统计每个标签对应的方法数量,筛选数量大于1的标签:

# 去重:保留每个标签的不同捕获方法记录
unique_records = df.drop_duplicates(subset=['TagNumber', 'MethodCaught'])
# 统计每个标签的方法数量,筛选数量>1的标签
tag_method_counts = unique_records['TagNumber'].value_counts()
multi_method_tags = tag_method_counts[tag_method_counts > 1].index.tolist()

print(multi_method_tags)  # 输出: [1, 2]

优势:数据量大时更高效,先去重减少了后续统计的计算量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:38:20