Значение Python подсчитывает и возвращает остальные столбцы в пандах - PullRequest
0 голосов
/ 05 мая 2018

Я только начал делать свой первый проект ML с Python, и застрял с одной проблемой. enter image description here Мой проект - проанализировать некоторую информацию о приюте для животных. Выше приведен список животных, купленных в приюте. Я хочу посмотреть, какие животные (на основе идентификатора животного) были куплены в приюте более 3 раз, а затем вернуть кадр с идентификатором животного, породой, информацией за месяц и т. Д. Моя первая попытка:

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

После этого кода Python говорит мне: IndexingError: в качестве индексатора предоставляется недопустимая логическая серия (индексы логической серии и индексированного объекта не совпадают

Моя вторая попытка:

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

Теперь я получаю следующий вывод: enter image description here

Теперь у меня есть список удостоверений личности животных, которые были возвращены в приют более 3 раз. Но я скучаю по другой породе / datatime / monthyear ... информации. Мой вопрос заключается в том, как лучше всего связать идентификационный номер животного и другую информацию: порода, месячный год, тип животного и т. Д. Так что я могу дополнительно проанализировать возвращенных животных.

Большое спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы можете создать еще один столбец с счетчиками и использовать его для фильтрации.

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]
0 голосов
/ 05 мая 2018

A 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...