Как сплющить панду - PullRequest
       0

Как сплющить панду

0 голосов
/ 05 декабря 2018

Вот мой кадр данных панд, и я бы хотел сгладить.Как я могу это сделать?

У меня есть вход

key column
1 {'health_1': 45, 'health_2': 60, 'health_3': 34, 'health_4': 60, 'name': 'Tom'}   
2 {'health_1': 28, 'health_2': 10, 'health_3': 42, 'health_4': 07, 'name': 'John'}  
3 {'health_1': 86, 'health_2': 65, 'health_3': 14, 'health_4': 52, 'name': 'Adam'}

Ожидаемый результат

Все health и name станут column name своими собственными values.Без определенного порядка.

health_1 health_2 health_3 health_4 name key
45          60       34       60    Tom  1
28          10       42       07    John 2
86          65       14       52    Adam 3

Ответы [ 5 ]

0 голосов
/ 05 декабря 2018

Решения, использующие apply, выходят за рамки.Вы можете создать желаемый DataFrame, используя список словарей, как у вас в column Series.Вы можете легко получить этот список словарей, используя метод tolist:

res = pd.concat([df.key, pd.DataFrame(df.column.tolist())], axis=1)
print(res)

   key  health_1  health_2  health_3  health_4  name
0    1        45        60        34        60   Tom
1    2        28        10        42         7  John
2    3        86        65        14        52  Adam
0 голосов
/ 05 декабря 2018

Это должно работать:

df['column'].apply(pd.Series)

Дает:

   health_1  health_2  health_3  health_4  name
0  45        60        34        60        Tom 
1  28        10        42        7         John
2  86        65        14        52        Adam
0 голосов
/ 05 декабря 2018

Вы можете сделать это с помощью одной строки решения,

df_expected = pd.concat([df, df['column'].apply(pd.Series)], axis = 1).drop('column', axis = 1)

Полная версия :

import pandas as pd
df = pd.DataFrame({"column":[
{'health_1': 45, 'health_2': 60, 'health_3': 34, 'health_4': 60, 'name': 'Tom'}   ,
{'health_1': 28, 'health_2': 10, 'health_3': 42, 'health_4': 7, 'name': 'John'}  ,
{'health_1': 86, 'health_2': 65, 'health_3': 14, 'health_4': 52, 'name': 'Adam'}
]})

df_expected = pd.concat([df, df['column'].apply(pd.Series)], axis = 1).drop('column', axis = 1)
print(df_expected)

DEMO: https://repl.it/repls/ButteryFrightenedFtpclient

0 голосов
/ 05 декабря 2018

Попробуйте:

pd.concat([pd.DataFrame(i, index=[0]) for i in df.column], ignore_index=True)

Вывод:

   health_1  health_2  health_3  health_4  name
0        45        60        34        60   Tom
1        28        10        42         7  John
2        86        65        14        52  Adam
0 голосов
/ 05 декабря 2018

Не уверен, что понимаю - это формат по умолчанию для DataFrame?

import pandas as pd
df = pd.DataFrame([
{'health_1': 45, 'health_2': 60, 'health_3': 34, 'health_4': 60, 'name': 'Tom'}   ,
{'health_1': 28, 'health_2': 10, 'health_3': 42, 'health_4': 7, 'name': 'John'}  ,
{'health_1': 86, 'health_2': 65, 'health_3': 14, 'health_4': 52, 'name': 'Adam'}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...