事实上,我不确定这是否是横截面,因为它已经过了一段时间,但我认为它仍然是。
我有一个数据框架,如下所示:
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'),并有一个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 所以它似乎已经崩溃了,但我现在失去了数据?或者,对象现在是如何存储的?我意识到我还没有完成应用阶段,这可能是我将如何生成新行和新列,但我不知道下一步,或者是否有类似的菜谱示例。
谢谢,贾里德
发布于 2015-06-10 15:25:12
看起来,您正在寻找一种执行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。
https://stackoverflow.com/questions/30759945
复制相似问题