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