考虑数据文件:
df = pd.DataFrame(
{'last_year': [1, 2, 3], 'next_year': [4, 5, 6]},
index=['foo', 'bar', 'star']
)
last_year next_year
foo 1 4
bar 2 5
star 3 6
我正在寻找一种简单的方法来显示此表的列和行总计。
我的想法是通过.pivot_table()
来实现:
pd.pivot_table(
df,
index=df.index,
margins=True,
aggfunc=sum
)
但是,这仅适用于第一个轴(垂直):
last_year next_year
bar 2 5
foo 1 4
star 3 6
All 6 15
我错过了什么?为什么像在this documentation's example中一样,不计算行总计?还有,为什么它会打乱我的索引顺序
我对df['All'] = df.sum(axis=1)
类解决方案不感兴趣;我想要一种不影响原始数据帧的动态方法。数据透视表似乎是实现这一点的最合乎逻辑的方法(据我所知),但也许还有更好的方法
我的猜测是,每一列在
pivot_table
中都是它自己的组,所以你看不到水平聚合(聚合一个元素是毫无意义的)。为了证明差异,请考虑^ {CD2>}:输出:
也就是说,这很可能是一个bug
在
pivot_table
中不指定values
和columns
参数时。它将使用values
的所有列。因为您只指定了index
参数,所以其余的列last_year
、next_year
被用作聚合的值。也就是说,您想对last_year
,next_year
列的值应用sum
函数由于
df
的所有列都用于values
参数,因此pivot_table
不会将任何内容透视到列(轴=1)。因此,它没有理由在axis=1
上执行margins
试试这个样品
因此,
pivot_table
对两列last_year
和每组index
应用求和,将bar
和35
和71
求和,最后计算轴=0上的margins
。没有旋转到轴=1,因此它不会在轴=1上执行margins
要查看pivot_table使用
values
参数的所有列,您可以尝试使用此命令查看keyerror对aggfunc使用dict时,
pivot_table
将values
参数中的每一列传递给dict以获得相应的aggfunc。如上所述,我没有在dict中指定列next_year
。因此,当pivot_表在dict中查找其aggfunc时,它返回keyrerror我不知道这是否有帮助,但我对列和行进行了切换,以便进行合计。对于改进的代码,您能否更深入地解释动态方法?谢谢,我希望这对你有帮助
相关问题 更多 >
编程相关推荐