Панды: лучший способ объединить строки для «широкого» набора данных? - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь создать «широкий» набор данных с одной записью на игру, а не одной записью на команду на игру.Вот небольшой пример того, что у меня есть, а затем то, что я хотел бы иметь.

   GAME-ID       TEAM  SCORE
0      123  Cleveland     95
1      123    Orlando    101
2      124   New York    104
3      124    Detroit     98
   GAME-ID      TEAM1    TEAM2  SCORE1  SCORE2
0      123  Cleveland  Orlando      95     101
1      124   New York  Detroit     104      98

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

import pandas as pd

dict1 = {'GAME-ID':[123, 123, 124, 124],
         'TEAM':['Cleveland', 'Orlando', 'New York', 'Detroit'],
         'SCORE':[95, 101, 104, 98]}

df = pd.DataFrame(dict1)
df['GAME_ID_CT'] = df.groupby('GAME-ID').cumcount() + 1
print(df)

Результат из кода выше:

   GAME-ID       TEAM  SCORE  GAME_ID_CT
0      123  Cleveland     95           1
1      123    Orlando    101           2
2      124   New York    104           1
3      124    Detroit     98           2

Если есть способ сделать это с помощью столбца, а не группы циклов, это было бы замечательно.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Я думаю, что на самом деле это работает лучше всего для меня.Это просто и вмещает намного больше переменных.

df1 = df[df['GAME_ID_CT'] == 1]
df2 = df[df['GAME_ID_CT'] == 2]

new_df = pd.merge(df1, df2, on='GAME-ID', suffixes=['1', '2'])
print(new_df)

   GAME-ID      TEAM1  SCORE1  GAME_ID_CT1    TEAM2  SCORE2  GAME_ID_CT2
0      123  Cleveland      95            1  Orlando     101            2
1      124   New York     104            1  Detroit      98            2
0 голосов
/ 21 сентября 2019

Вы можете попробовать pivot:

new_df = df.pivot(index='GAME-ID',columns='GAME_ID_CT')

# rename
new_df.columns = [f'{a}{b}' for a,b in new_df.columns]

Вывод:

             TEAM1    TEAM2  SCORE1  SCORE2
GAME-ID                                    
123      Cleveland  Orlando      95     101
124       New York  Detroit     104      98
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...