[英]pandas pivot table issue - assuming it is how i am structuring it?
我有一个包含视频游戏平台的数据集,以及为其发布游戏的年份。
我想要做的是最终得到一个 dataframe ,其中包含平台每年发布的标题数量。
我最初的 dataframe 看起来像这样:
platform year
0 Wii 2006.0
1 NES 1985.0
2 Wii 2008.0
3 Wii 2009.0
4 GB 1996.0
5 GB 1989.0
6 DS 2006.0
7 Wii 2006.0
8 Wii 2009.0
9 NES 1984.0
10 DS 2005.0
11 DS 2005.0
12 GB 1999.0
13 Wii 2007.0
14 X360 2010.0
15 Wii 2009.0
16 PS3 2013.0
17 PS2 2004.0
18 SNES 1990.0
19 DS 2005.0
我正在使用 groupby 将它们放在一起:
df = df.sort_values(['year']).groupby(['year'])['platform'].value_counts()
这让我很接近:
year platform
1980.0 2600 9
1981.0 2600 46
1982.0 2600 36
1983.0 2600 11
NES 6
1984.0 NES 13
2600 1
1985.0 NES 11
2600 1
DS 1
但这是一个系列,以年份为索引,我无法将其粘贴到热图之类的东西中。
这是所需 output 的示例:
year platform #_titles
1980 2600 9
1981 2600 46
1982 2600 36
1983 2600 11
1983 NES 6
1984 NES 13
1984 2600 1
1985 NES 11
1985 2600 1
1985 DS 1
1985 PC 1
1986 NES 19
1986 2600 2
1987 NES 10
1987 2600 6
1988 NES 11
1988 2600 2
1988 GB 1
1988 PC 1
1989 GB 10
我在想我可能需要使用 pivot_table() ,但这是我仍然很陌生并且正在努力实现的东西。
我试过类似的东西:
df = df.pivot_table(df,index='year',columns = 'platform',aggfunc = 'count')
但我的 output 那时只是一年。
显然我做错了什么,并且认为是时候停止在 juypter 笔记本上敲打我的虚拟头并寻求一些建议。
我可以让原始组方法正常工作,或者以任何一种方式使用 pivot 表 - 我只是希望能得到一些关于我做错了什么的指示,以便我可以纠正它。
提前感谢您的时间,
杰瑞德
编辑:这是第一个答案的结果(如果里面有 aggfunc 那就完美了?不知道为什么不存在?):|year|platform| |----|--------| |1980.0|2600| |1981.0|2600| |1982.0|2600| |1983.0|2600 ||NES| |1984.0|2600| ||NES|
这是 pivot 表的解决方案:
res = pd.pivot_table(df,index=['year', 'platform'],aggfunc = 'size')
>>> print(res)
year platform
1984.0 NES 1
1985.0 NES 1
1989.0 GB 1
1990.0 SNES 1
1996.0 GB 1
1999.0 GB 1
2004.0 PS2 1
2005.0 DS 3
2006.0 DS 1
Wii 2
2007.0 Wii 1
2008.0 Wii 1
2009.0 Wii 3
2010.0 X360 1
2013.0 PS3 1
也许这就是你想要的? 很难说,因为您的 output 与输入不匹配。
df.sort_values(['year']).groupby(['year','platform']).size().reset_index(name='#_titles')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.