我刚开始用Python做我的第一个ML项目,并且遇到了一个问题。 我的项目是分析一些动物收容所的信息。以上是被收集到收容所的动物名单。我想看看哪些动物(基于动物ID)已经被带到避难所3次以上,然后返回带有动物ID,品种,月份信息等的数据框。我的第一次尝试:
aac[aac['Animal ID'].value_counts()>3]
在此代码之后,Python告诉我: IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列的索引和索引对象的索引不匹配
我的第二次尝试:
temp=df.groupby('Animal ID').count()
temp[temp['Name']>3]
现在我确实已经获得了3次以上的动物身份清单。但我想念其他品种/数据时间/月份...信息。我的问题是将动物ID和其他信息联系起来的最佳方法是:品种,月份,动物类型等。所以我可以进一步分析返回的动物。
非常感谢帮助我!
答案 0 :(得分:3)
此处不需要groupby
操作。
您可以创建value_counts
系列,对发生次数超过3次的项目进行过滤,然后使用此系列过滤原始数据框。
这是一个最小的例子:
df = pd.DataFrame({'col1': range(10), 'col2': range(10, 20)},
index=['A', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'B'])
c = df.index.value_counts()
idx = c[c > 3].index
res = df.loc[df.index.isin(idx)]
print(res)
col1 col2
A 0 10
A 1 11
B 2 12
A 3 13
B 4 14
A 5 15
B 6 16
B 9 19
答案 1 :(得分:0)
您可以使用计数创建另一列,并将其用于过滤。
df = pandas.DataFrame({'col1': range(10), 'col2': range(10, 20), 'col3': ['A', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'B']})
df = df.merge(df.groupby('col3').apply(len).to_frame(name='counts'), left_on='col3', right_index=True)
df[df.counts > 2]