Python Pandas Groupby - by = list выдает ошибку? - PullRequest
2 голосов
/ 14 марта 2019

Программирование Новичок, прости меня, если это действительно просто

Я знаю, что мы должны иметь возможность использовать список для группирования в пандах, и они должны быть одинаковой длины, но почему-то я не могузаставить это работать?

Использование набора данных Titanic из seaborn
Функция определения возрастных групп

def age_groups(x):
    array = []
    for i in x['age']:
        if(math.isnan(i)):
            array.append(9)
        if(i < 20):
            array.append(1)
        if(i < 40):
            array.append(2)
        if(i < 60):
            array.append(3)
        else:
            array.append(4)
    return array

groups = age_groups(titanic)
titanic.groupby(groups).mean()

Я получаю следующую ошибку

Файл "pandas \ hashtable.pyx"", строка 683, в pandas.hashtable.PyObjectHashTable.get_item (pandas \ hashtable.c: 12322)

KeyError: 2

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Существует более простой способ получить возрастные группы и использовать numpy.digitize, который возвращает целое число в зависимости от того, к какому бину относится значение, с 0 и len(bins) ( здесь 5) соответственно недостаточность и переполнение. NaN, похоже, входят в переполнение (поскольку они не сравниваются меньше, чем любое число).

groups = np.digitize(titanic.age, [0, 20, 40, 60, titanic.age.max() + 1])
titanic.groupby(groups).age.mean()
# 1    11.979695
# 2    28.580103
# 3    47.354015
# 4    65.096154
# 5          NaN
# Name: age, dtype: float64
1 голос
/ 14 марта 2019

Необходимо убедиться, что переменная, которую вы передаете функции groupby, содержится в кадре данных:

import seaborn as sns
import numpy as np

titanic = sns.load_dataset('titanic')

titanic['groups'] = titanic['age']
titanic.loc[np.isnan(titanic.age), 'groups'] = 9
titanic.loc[titanic.age >= 60, 'groups'] = 4
titanic.loc[titanic.age < 60, 'groups'] = 3
titanic.loc[titanic.age < 40, 'groups'] = 2
titanic.loc[titanic.age < 20, 'groups'] = 1
titanic.groupby('groups').mean()


        survived    pclass        age  ...       fare  adult_male     alone
groups                                 ...                                 
1.0     0.481707  2.530488  11.979695  ...  31.794741    0.298780  0.329268
2.0     0.387597  2.304910  28.580103  ...  32.931200    0.658915  0.653747
3.0     0.394161  1.824818  47.354015  ...  41.481784    0.635036  0.569343
4.0     0.269231  1.538462  65.096154  ...  43.467950    0.846154  0.730769
9.0     0.293785  2.598870        NaN  ...  22.158567    0.700565  0.751412

[5 rows x 8 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...