Pandas将不平衡面板数据转换为横截面

2024-09-29 22:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个数据框,看起来像这样:

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

我想将这些数据转换为单个观测值,输出如下:

^{pr2}$

我发现了split-apply-combine范例,它看起来很有前途。但即使在表面上,我已经完成了df.groupby('id')并且print语句输出了以下内容:

               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 

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

谢谢,贾里德


Tags: 数据idopenyearscottusapplyplayer
1条回答
网友
1楼 · 发布于 2024-09-29 22:37:58

看起来您正在寻找一种执行^{}操作的方法。在

从近似表开始:

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]})

给予:

^{pr2}$

你可以跑了

>> 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。在

相关问题 更多 >

    热门问题