如何在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
相关产品推荐
相关产品推荐

