python - 转换 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

我需要将它转换为新数组:

 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 中完成它,那也很棒!

最佳答案

要同时按idmatch 进行分组,您可以使用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

它使按 homeaway 进行选择或分组比列索引更容易。总的来说,我认为它是一种更好的 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/

相关文章:

python - 在PyTest中如何配置CaptureManager插件错误 'CaptureManager'对象没有属性 'suspendcapture'

sql - 在 select 语句的第一行中使用 '*' 和 '.*' 有什么区别?

java - 如何在 PostgreSQL 上使用 java.lang.NumberFormatException 执行 liquibase

python - 写入 xlsx 在一个单元格中创建重复行

python-2.7 - Joblib 内存使用量不断增长

python - 为什么 Python 2 中的类型顺序是固定的,而 Python 3 中的类型错误是不可排序的?

python - 在 python 中使用 dbf 库读取更改

python - cx_freeze + PyQt5 + python

python - Django 模板和应用程序未加载

javascript - "SERIAL"处或附近的语法错误,仅使用自动增量