如何使用'值'中使用的相同列。对于'列'或者'索引'?
例如:
pd.pivot_table(data, values='Survived', index=['Survived', 'Sex', 'Pclass'],
aggfunc=len, margins=True)
值和索引使用相同的列Survived。当我尝试运行以上内容时,我得到了
ValueError: Grouper for 'Survived' not 1-dimensional
然而,如果不是值='幸存'我使用另一列,pivot_table工作正常。
答案 0 :(得分:0)
我看到的一个问题是您在调用columns
时没有设置pivot_table
参数(它告诉熊猫哪些值用作pivot_table
输出的列标题) )。
数据透视表操作实际上是groupby -> aggregate -> unstack
的继承。假设您有这个DataFrame
:
survived sex pclass other
0 False f a 29
1 True f b 6
2 True f b 22
3 False m b 55
4 False f a 59
.. ... .. ... ...
95 False f a 66
96 False f c 42
97 True m c 93
98 True m c 59
99 False f b 93
您可以使用pivot_table
旋转此表:
pd.pivot_table(df, index='sex', columns='pclass', values='other', aggfunc=sum)
pclass a b c
sex
f 1000 840 306
m 728 851 1247
或者您可以使用groupby
和unstack
获得相同的结果:
df.groupby(['sex', 'pclass'])['other'].sum().unstack()
pclass a b c
sex
f 1000 840 306
m 728 851 1247
这个简短的故事的重点是数据透视表实际上是groupby
操作。在您的情况下,您尝试按['Survived', 'Sex', 'Pclass']
分组并再次使用'Survived'
聚合len
。因为'Survived'
已经是输出表索引的一部分,所以这没有多大意义(这就是pivot_table
给您错误的原因)。
如果您确实想完成这项工作,可以使用groupby
代替:
df.groupby(['survived', 'sex', 'pclass', 'other']['survived'].apply(len).unstack()
但是,我认为您实际上是想实现其他目标,但是不确定。