Преобразование столбцов Pandas DataFrame в строки - PullRequest
0 голосов
/ 08 июня 2018

У меня есть следующий dict, который я преобразовал в dataframe

players_info = {'Afghanistan': {'Asghar Stanikzai': 809.0,
  'Mohammad Nabi': 851.0,
  'Mohammad Shahzad': 1713.0,
  'Najibullah Zadran': 643.0,
  'Samiullah Shenwari': 774.0},
 'Australia': {'AJ Finch': 1082.0,
  'CL White': 988.0,
  'DA Warner': 1691.0,
  'GJ Maxwell': 822.0,
  'SR Watson': 1465.0},
 'England': {'AD Hales': 1340.0,
  'EJG Morgan': 1577.0,
  'JC Buttler': 985.0,
  'KP Pietersen': 1176.0,
  'LJ Wright': 759.0}}

pd.DataFrame(players_info)

В результате получается

enter image description here

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

Player            Team           Score
Mohammad Nabi     Afghanistan    851.0
Mohammad Shahzad  Afghanistan   1713.0  
Najibullah Zadran Afghanistan    643.0  
JC Buttler        England        985.0
KP Pietersen      England       1176.0
LJ Wright         England        759.0

Я пробовал reset_index, но он не работает, как я хочу.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Давайте сделаем удар, используя melt.Должно быть довольно быстро.

df.rename_axis('Player').reset_index().melt('Player').dropna()

                Player     variable   value
2     Asghar Stanikzai  Afghanistan   809.0
10       Mohammad Nabi  Afghanistan   851.0
11    Mohammad Shahzad  Afghanistan  1713.0
12   Najibullah Zadran  Afghanistan   643.0
14  Samiullah Shenwari  Afghanistan   774.0
16            AJ Finch    Australia  1082.0
18            CL White    Australia   988.0
19           DA Warner    Australia  1691.0
21          GJ Maxwell    Australia   822.0
28           SR Watson    Australia  1465.0
30            AD Hales      England  1340.0
35          EJG Morgan      England  1577.0
37          JC Buttler      England   985.0
38        KP Pietersen      England  1176.0
39           LJ Wright      England   759.0
0 голосов
/ 08 июня 2018

Вам нужно:

df = df.stack().reset_index()
df.columns=['Player', 'Team', 'Score']

Вывод df.head(5):

      Player    Team    Score
0   AD Hales    Score   1340.0
1   AJ Finch    Team    1082.0
2   Asghar Stanikzai    Player  809.0
3   CL White    Team    988.0
4   DA Warner   Team    1691.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...