首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫- .pivot()

熊猫- .pivot()
EN

Stack Overflow用户
提问于 2017-09-05 16:51:18
回答 1查看 103关注 0票数 1

假设我有以下数据:

代码语言:javascript
复制
import pandas as pd
import numpy as np
df = pd.DataFrame({"ort":["home","away","home","away"]*12, 
  "numbers":np.random.randint(0,3,48),"wins":np.random.randint(99,104,48)})

如何将df转换为ort成为列索引的形状,即生成的数据文件的形状如下所示

代码语言:javascript
复制
| Ort   | Home          |   Away        |
|-------|---------------|---------------|
| Index | numbers wins  |  numbers wins |
| 0     |  0 102        |  2 99         |
| 1     |  2 103        |  1 99         |

等。

我尝试了df.pivot(columns = "ort"),它不能工作,因为它导致home and away在数字和胜利下面。

有人能告诉我怎么做吗?

我见过How to spread a column in a Pandas data frame。然而,我的列“数字”和“胜利”只是占位符。在我的实际df中,我有100列(在上面的链接中,只有一列)。所以我的问题是我怎样才能做到这一点。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-05 17:09:47

您需要为游戏id引入一个占位符,以便传播。

代码语言:javascript
复制
df['game_id'] = np.array(range(0, len(df.index)//2)).repeat(2)

然后这就起作用了:

代码语言:javascript
复制
pd.pivot_table(df, index='game_id', columns='ort',values=['numbers','wins']
               ).swaplevel(0,1, axis=1).sort_index(axis=1)
#ort        away         home     
#        numbers wins numbers wins
#game_id                          
#0             2  101       2  101
#1             0  100       0   99
#2             1  101       2   99
#3             2  101       2  103
#4             0  103       1  101
#5             0   99       1  102
#...
#23            0  100       1  101

请解释一下你的评论:

  • 使用swaplevels(0,1, axis=1)交换列multiIndex的级别。
  • 使用sort_index(axis=1)按新的顶级索引进行分组(home vs. )。
  • 如果您有100个度量标准,则需要用一个度量名称列表替换['numbers','wins']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46059876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档