我正在努力将 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 中完成它,那也很棒!
最佳答案
要同时按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
关于python - 转换 Pandas 中列中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506670/