Как применить value_counts ко всему индексу и создать новый фрейм данных? - PullRequest
0 голосов
/ 06 января 2019

У меня есть следующий фрейм данных:

df = pd.DataFrame({
'name': {0: 'Silvers Park', 1: 'Adare Road', 2: 'Cargo Road'}, 
'type_2': {0: 'Secondary', 1: 'Special', 2: 'Secondary'}, 
'type_3': {0: 'Nursery', 1: nan, 2: nan}, 
'type_4': {0: 'Primary', 1: nan, 2: nan}, 
'type_5': {0: nan, 1: nan, 2: nan}, 
'type_6': {0: nan, 1: nan, 2: nan}
})



                       name      type_2     type_3   type_4  type_5 type_6
0                 Silvers Park  Secondary   Nursery  Primary   NaN    NaN
1                  Adare Road     Special      NaN      NaN    NaN    NaN
2                  Cargo Road   Secondary      NaN      NaN    NaN    NaN

Желаемый результат:

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

Например:

                      name     Secondary     Special   Primary  Nursery 
0                 Silvers Park      1           0           1         1 
1                  Adare Road       0           1           0         0
2                  Cargo Road       1           0           0         0 

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

Панды 0,23,4

Python 3.7.1

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Используйте get_dummies с удалением только столбцов NaN s, по возможности дубликаты добавьте sum:

df = (pd.get_dummies(df.set_index('name')
                      .dropna(how='all', axis=1), prefix_sep='',prefix='')
        .sum(axis=1, level=0)
        .reset_index())
print (df)
           name  Secondary  Special  Nursery  Primary
0  Silvers Park          1        0        1        1
1    Adare Road          0        1        0        0
2    Cargo Road          1        0        0        0
0 голосов
/ 06 января 2019

Сначала melt ваши данные, затем поворот с pivot_table:

u = df.melt('name')
u.pivot_table(index='name', columns='value', aggfunc='size', fill_value=0)

value         Nursery  Primary  Secondary  Special
name                                              
Adare Road          0        0          0        1
Cargo Road          0        0          1        0
Silvers Park        1        1          1        0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...