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

Python机器学习项目:筛选重复入所动物遇IndexingError问题求助

解决动物收容所数据筛选的IndexingError问题

为什么你的代码会报错?

你的代码aac[aac['Animal ID'].value_counts()>3]出问题的核心原因是:value_counts()返回的是一个以Animal ID为索引的Series,而原DataFrameaac的索引是行号。当你尝试用这个布尔Series去索引原DataFrame时,两者的索引完全不匹配,自然会抛出IndexingError(对齐错误)。

正确的解决方法

我们需要先找出所有入所次数超过3次的Animal ID,再用这些ID去筛选原DataFrame中的对应记录,最后提取你需要的字段。这里有两种实用的方法:

方法1:先筛选高频ID,再匹配记录

这种方法直接定位目标ID,适合只需要最终筛选结果的场景:

# 1. 计算每个Animal ID的入所次数,筛选出次数>3的ID列表
high_frequency_ids = aac['Animal ID'].value_counts()[aac['Animal ID'].value_counts() > 3].index

# 2. 筛选这些ID对应的记录,并提取指定字段
filtered_df = aac[aac['Animal ID'].isin(high_frequency_ids)][['Animal ID', 'breed', 'MonthYear']]

方法2:用transform标记每个行的入所次数(更灵活)

如果后续还需要用到“每个记录对应的入所次数”这个信息,或者想更直观地查看筛选逻辑,推荐用groupby+transform:

# 1. 给每条记录添加该Animal ID的总入所次数字段
aac['total_entries'] = aac.groupby('Animal ID')['Animal ID'].transform('count')

# 2. 筛选入所次数>3的记录,提取指定字段
filtered_df = aac[aac['total_entries'] > 3][['Animal ID', 'breed', 'MonthYear']]

额外注意事项

  • 务必确认列名拼写正确(比如Animal ID带有空格,别误写成AnimalID)
  • 如果Animal ID列存在空值(NaN),建议先过滤掉:aac_clean = aac.dropna(subset=['Animal ID']),再进行上述操作,避免把空值当成一个独立的ID统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:59