实际上我不确定这是否是横截面的结尾,因为它是一段时间,但我认为它仍然是。
我有一个如下所示的数据框:
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
我想将此数据转换为单个观察结果,所需的输出如下:
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')
并且打印语句输出:
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
所以它似乎已经崩溃了,但我现在丢失了数据?或者现在如何存储对象?我意识到我还没有完成应用阶段,这可能是我将如何生成新行和新列,但我不知道下一步或者是否有类似这样的菜谱示例。
谢谢,Jared
答案 0 :(得分:1)
您似乎正在寻找一种方法来执行pivot_table
操作。
从表格的近似开始:
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]})
,并提供:
>> 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
你可以运行
>> 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。