Попытка использовать groupby для получения наиболее распространенного значения и получения IndexError - PullRequest
0 голосов
/ 22 февраля 2019

Я сейчас работаю над проектом для школы и столкнулся с небольшой проблемой.У меня есть набор данных airbnb, и в настоящее время я пытаюсь заполнить некоторые значения NaN, которые у меня есть, в столбце с именем Property_type наиболее распространенным значением для типа свойства для различных категорий столбца '' вмещает '' (который возвращает скольколюди, которых может принять конкретный airbnb).

Вот пример столбцов

property_type   accommodates

Townhouse         2
Apartment         3
Townhouse         4
Townhouse         2
NaN               3
Townhouse         2
House             3
...               ...

В этом случае я хотел бы найти наиболее часто встречающийся тип свойства, который соответствует3 человека и заполните значения NaN этим типом свойства.

Моя проблема заключается в получении этого наиболее распространенного значения (я знаю, что делать потом, но этот шаг не работает)

Iпопытался найти наиболее распространенные значения с помощью этого кода

property_type_mode = airbnb[['property_type','accommodates']].groupby(['accommodates']).agg(lambda x:x.value_counts().index[0])

Это возвращает ошибку:

IndexError: index 0 is out of bounds for axis 0 with size 0

Я не понимаю почему, потому что я сделал аналогичные вещи для других столбцови это работает.

Кто-нибудь знает, что я могу сделать, чтобы решить это !!

Спасибо за ваше время !!

1 Ответ

0 голосов
/ 22 февраля 2019

Я думаю, что возвращается пустой индексный массив (одна из причин - пропущенные значения), поэтому выбираем возврат ошибкиРешение - использовать next с iter с возможным дополнительным значением, если нет совпадения:

f = lambda x: next(iter(x.value_counts().index), 'no match')
s = airbnb.groupby('accommodates')['property_type'].agg(f)

airbnb['property_type'] = airbnb['property_type'].fillna(airbnb['accommodates'].map(s))

Другое решение - использовать dropna

f = lambda x: x.value_counts().index[0]
s = airbnb.dropna(subset=['accommodates']).groupby('accommodates')['property_type'].agg(f)

airbnb['property_type'] = airbnb['property_type'].fillna(airbnb['accommodates'].map(s))
...