Python 转换熊猫中列中的行

Python 转换熊猫中列中的行,python,postgresql,python-2.7,pandas,Python,Postgresql,Python 2.7,Pandas,我正在努力将Pandas中的行转换为列,请查看下面的输入数据: id match bookmaker home away 1 T1-T2 Bet365 1.5 2.4 1 T1-T2 Bwin 1.6 2.2 1 T1-T2 Betfair 1.7 2.3 2 T1-T3 Bet365 1.2 2.9 2 T1-T3 Bwin 1.2 2.8 2 T1-T3 Betfair 1.1 3.0 我需要将其转换为新数组

我正在努力将Pandas中的行转换为列,请查看下面的输入数据:

 id match bookmaker home away  
  1  T1-T2 Bet365   1.5  2.4
  1  T1-T2 Bwin     1.6  2.2
  1  T1-T2 Betfair  1.7  2.3
  2  T1-T3 Bet365   1.2  2.9
  2  T1-T3 Bwin     1.2  2.8
  2  T1-T3 Betfair  1.1  3.0
我需要将其转换为新数组:

 id match  Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away  
  1  T1-T2         1.5         2.4       1.6       2.2          1.7          2.3
  2  T1-T3         1.2         2.9       1.2       2.8          1.1          3.0 

如果你能建议如何在PostgreSQL中实现,那也太酷了

我不知道SQL方法,但在pandas中,您希望:


我不知道SQL方法,但在pandas中,您希望:


要同时按
id
匹配项进行分组,可以使用
set\u index
。 如果您还将
收受赌注者
添加到索引中,然后
取消堆叠
它:

import numpy as np
import pandas as pd

df = pd.read_table('data', sep='\s+')
df = df.set_index(['id', 'match', 'bookmaker']).unstack(['bookmaker'])
你会得到

            home                away             
bookmaker Bet365 Bwin Betfair Bet365 Bwin Betfair
id match                                         
1  T1-T2     1.5  1.6     1.7    2.4  2.2     2.3
2  T1-T3     1.2  1.2     1.1    2.9  2.8     3.0

具有比平面单级列索引更多的结构:

Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away
df = df.swaplevel(0, 1, axis=1)
df = df.reindex(columns='Bet365 Bwin Betfair'.split(), level=0)
df.columns = ['{}_{}'.format(bet, hw)  for bet, hw  in df.columns]
pd.options.display.width = 100
print(df)
它使得按
home
away
进行选择或分组比列索引为平坦时更容易。总的来说,我认为它是一种更好的数据帧格式

但是,如果您希望使用平列索引:

Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away
df = df.swaplevel(0, 1, axis=1)
df = df.reindex(columns='Bet365 Bwin Betfair'.split(), level=0)
df.columns = ['{}_{}'.format(bet, hw)  for bet, hw  in df.columns]
pd.options.display.width = 100
print(df)
屈服

          Bet365_home  Bet365_away  Bwin_home  Bwin_away  Betfair_home  Betfair_away
id match                                                                            
1  T1-T2          1.5          2.4        1.6        2.2           1.7           2.3
2  T1-T3          1.2          2.9        1.2        2.8           1.1           3.0

要同时按
id
匹配项进行分组,可以使用
set\u index
。 如果您还将
收受赌注者
添加到索引中,然后
取消堆叠
它:

import numpy as np
import pandas as pd

df = pd.read_table('data', sep='\s+')
df = df.set_index(['id', 'match', 'bookmaker']).unstack(['bookmaker'])
你会得到

            home                away             
bookmaker Bet365 Bwin Betfair Bet365 Bwin Betfair
id match                                         
1  T1-T2     1.5  1.6     1.7    2.4  2.2     2.3
2  T1-T3     1.2  1.2     1.1    2.9  2.8     3.0

具有比平面单级列索引更多的结构:

Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away
df = df.swaplevel(0, 1, axis=1)
df = df.reindex(columns='Bet365 Bwin Betfair'.split(), level=0)
df.columns = ['{}_{}'.format(bet, hw)  for bet, hw  in df.columns]
pd.options.display.width = 100
print(df)
它使得按
home
away
进行选择或分组比列索引为平坦时更容易。总的来说,我认为它是一种更好的数据帧格式

但是,如果您希望使用平列索引:

Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away
df = df.swaplevel(0, 1, axis=1)
df = df.reindex(columns='Bet365 Bwin Betfair'.split(), level=0)
df.columns = ['{}_{}'.format(bet, hw)  for bet, hw  in df.columns]
pd.options.display.width = 100
print(df)
屈服

          Bet365_home  Bet365_away  Bwin_home  Bwin_away  Betfair_home  Betfair_away
id match                                                                            
1  T1-T2          1.5          2.4        1.6        2.2           1.7           2.3
2  T1-T3          1.2          2.9        1.2        2.8           1.1           3.0