Python 3.x 熊猫:为';宽';数据集?

Python 3.x 熊猫:为';宽';数据集?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我试图建立一个“广泛”的数据集,每场比赛有一个记录,而不是每队每场比赛有一个记录。这里有一个小例子,先是我拥有的,然后是我想要的 GAME-ID TEAM SCORE 0 123 Cleveland 95 1 123 Orlando 101 2 124 New York 104 3 124 Detroit 98 我可以为游戏id计数设置一个标志(见下文),然后稍后使用for循环进行迭代并有

我试图建立一个“广泛”的数据集,每场比赛有一个记录,而不是每队每场比赛有一个记录。这里有一个小例子,先是我拥有的,然后是我想要的

   GAME-ID       TEAM  SCORE
0      123  Cleveland     95
1      123    Orlando    101
2      124   New York    104
3      124    Detroit     98
我可以为游戏id计数设置一个标志(见下文),然后稍后使用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

如果有一种方法可以通过列而不是一堆循环来实现这一点,那就太好了。

您可以尝试
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

我认为这对我来说最有效。它很简单,可以容纳更多的变量

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
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