我正在努力将行转换为Pandas中的列,请查看下面的input data
:
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
我需要将其转换为new array
:
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中完成,也会很酷!
答案 0 :(得分:3)
我不知道SQL方法,但是在pandas中你想要pivot
:
In [233]:
df.pivot(index='id', columns = 'bookmaker')
Out[233]:
match home away
bookmaker Bet365 Betfair Bwin Bet365 Betfair Bwin Bet365 Betfair Bwin
id
1 T1-T2 T1-T2 T1-T2 1.5 1.7 1.6 2.4 2.3 2.2
2 T1-T3 T1-T3 T1-T3 1.2 1.1 1.2 2.9 3.0 2.8
答案 1 :(得分:2)
要按id
和match
进行分组,您可以使用set_index
。
如果您还将bookmaker
添加到索引,然后unstack
:
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
hierarchical (MultiIndex) column
home away
Bet365 Bwin Betfair Bet365 Bwin Betfair
的结构比平坦的单级列索引更多:
Bet365_home Bet365_away Bwin_home Bwin_away Betfair_home Betfair_away
它使home
或away
的选择或分组比列索引不变更容易。总的来说,我认为它是DataFrame的更好格式。
但是,如果您想要一个扁平列索引:
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