Python值计算并返回pandas中的其他列

时间:2018-05-04 22:37:53

标签: python pandas dataframe

我刚开始用Python做我的第一个ML项目,并且遇到了一个问题。 enter image description here 我的项目是分析一些动物收容所的信息。以上是被收集到收容所的动物名单。我想看看哪些动物(基于动物ID)已经被带到避难所3次以上,然后返回带有动物ID,品种,月份信息等的数据框。我的第一次尝试:

aac[aac['Animal ID'].value_counts()>3]

在此代码之后,Python告诉我: IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列的索引和索引对象的索引不匹配

我的第二次尝试:

temp=df.groupby('Animal ID').count() 
temp[temp['Name']>3]

现在我得到以下输出:enter image description here

现在我确实已经获得了3次以上的动物身份清单。但我想念其他品种/数据时间/月份...信息。我的问题是将动物ID和其他信息联系起来的最佳方法是:品种,月份,动物类型等。所以我可以进一步分析返回的动物。

非常感谢帮助我!

2 个答案:

答案 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]