首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫-将不平衡的面板数据转换为横截面

熊猫-将不平衡的面板数据转换为横截面
EN

Stack Overflow用户
提问于 2015-06-10 14:53:29
回答 1查看 807关注 0票数 0

事实上,我不确定这是否是横截面,因为它已经过了一段时间,但我认为它仍然是。

我有一个数据框架,如下所示:

代码语言:javascript
复制
Player          Finish  Tournament  Year    id
------------------------------------------------
Aaron Baddeley  9       Memorial    2012    1
Aaron Baddeley  17      Masters     2013    1
Aaron Watkins   15      US Open     2012    2
Adam Scott      9       US Open     2014    3
Adam Scott      4       Memorial    2014    3
Alex Cejka      8       US Open     2010    4
Andres Romero   2       Memorial    2012    5
Andrew Svoboda  19      Memorial    2014    6
Andy Sullivan   13      Memorial    2015    7

我希望将这些数据转换为单个观测,并提供如下所需的输出:

代码语言:javascript
复制
Player           2012_Memorial    2013_Memorial    2014_Memorial   ...  id
----------------------------------------------------------------------------
Aaron Baddeley        9                 17              2012             1
Adam Scott            NA                NA               9               3 
.
. 
.

我发现了split-apply-combine范例,它看起来很有前途。但即使在表面上,我也做了df.groupby('id'),并有一个print语句输出如下:

代码语言:javascript
复制
               Player  Finish Tournament  Year 
id                                                                        
1      Aaron Baddeley       9   Memorial  2012 
2       Aaron Watkins      15    US Open  2012 
3          Adam Scott       9    US Open  2014 

所以它似乎已经崩溃了,但我现在失去了数据?或者,对象现在是如何存储的?我意识到我还没有完成应用阶段,这可能是我将如何生成新行和新列,但我不知道下一步,或者是否有类似的菜谱示例。

谢谢,贾里德

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-10 15:25:12

看起来,您正在寻找一种执行pivot_table操作的方法。

从表的近似值开始:

代码语言:javascript
复制
df = pd.DataFrame({
    'player': ['ab', 'ab', 'aw', 'as', 'as'],
    'finish': [9, 17, 15, 9, 4],
    'tournament': ['m', 'm', 'us', 'us', 'm'],
    'year': [12, 13, 12, 12, 14],
    'id': [1, 1, 2, 3, 3]})

给予:

代码语言:javascript
复制
>> df
        finish  id  player  tournament  year
0   9   1   ab  m   12
1   17  1   ab  m   13
2   15  2   aw  us  12
3   9   3   as  us  12
4   4   3   as  m   14

你可以跑

代码语言:javascript
复制
>> df.pivot_table(values='finish', index=['player', 'id'], columns=['year', 'tournament'])
    year    12  13  14
    tournament  m   us  m   m
player  id              
ab  1   9   NaN     17  NaN
as  3   NaN     9   NaN     4
aw  2   NaN     15  NaN     NaN

请注意,它为您提供了一个多层次的年份/锦标赛列。我个人认为这是更干净的,但你可以很容易的flatten it

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30759945

复制
相关文章

相似问题

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