Как классифицировать значения фрейма данных в pandas? - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь написать код для классификации набора данных (из CSV) на основе диапазона значений с использованием библиотеки python pandas. Агрегатные функции могут быть использованы. Но я борюсь за использование агрегатных функций.

    +-------------+-------------+-------------+-------------+-------------+
    |Name         | Age         |Region       |Telephone    |Address      |
    +-------------+-------------+-------------+-------------+-------------+
    |             |             |             |             |             |

Я мог бы разработать следующий код.

import pandas as pd

data_frame = pd.read_csv('5000 Records.csv')

data_frame['age_range'] = pd.cut(data_frame['Age in Yrs.'],
                             bins=[-float('inf'),30,50,float('inf')],
                             labels=['above', 'in between', 'below'])

data_frame = data_frame.groupby(['Region','age_range']).agg(
    {
        'age_range': "count"
    }
)

print(data_frame)

, но результат выглядит следующим образом

                      age_range
Region    age_range            
Midwest   above             312
          in between        695
          below             390
Northeast above             201
          in between        421
          below             219
South     above             435
          in between        983
          below             452
West      above             211
          in between        443
          below             238

Но Требуется получить вывод:

+-------------+-------------+-------------+-------------+
|Region       | above         |in between |below        |
+-------------+-------------+-------------+-------------+
|             |             |             |             | 

Может кто-нибудь помочь мне в этом? Спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Использование Series.unstack с упрощенным решением groupby - удалено agg и добавлено GroupBy.size.

GroupBy.count используется для подсчета с исключением пропущенных значений, здесь оба решения работают одинаково, потому что age_range используется для параметра by в groupby:

df = data_frame.groupby(['Region','age_range']).size().unstack(fill_value=0)

Или используйте crosstab:

df = pd.crosstab(data_frame['Region'], data_frame['age_range'])
0 голосов
/ 10 марта 2020

Попробуйте DataFrame.pivot метод:

data_frame.pivot(index='Region', columns='age_range', values='count')

...