首页 > 解决方案 > 带有 sum() 和 apply() 的 Python 数据框轴的工作方式不同

问题描述

有一个如下所示的数据框

    Seoul   Busan
    Green   Red Green
    a   1   0   1   2
        2   3   4   5
    b   1   6   7   8
        2   9   10  11

当我执行df.sum(axis=0, level=0) 时,它会逐行执行,所以结果是

Seoul   Busan
Green   Red Green
a   3   5   7
b   15  17  19

但是当我执行 df.apply(print,axis=0) 时,它会逐列打印

a  1    0
   2    3
b  1    6
   2    9
Name: (Seoul, Green), dtype: int32
a  1     1
   2     4
b  1     7
   2    10
Name: (Seoul, Red), dtype: int32
a  1     2
   2     5
b  1     8
   2    11
Name: (Busan, Green), dtype: int32

为什么会发生与“axis = 0”相同的差异?你能给我解释一下吗?

标签: pythonpandasdataframe

解决方案


当您沿axis=0求和时,您会沿每一列计算总和,但结果是一个包含总和的 DataFrame(每个索引的行级别为0)。

但是apply with axis=0实际上意味着:将给定的方法依次应用于每一列(并收集结果)。

请注意,print仅打印其参数。从apply的角度来看,它返回None,所以:

  • apply的实际结果,对于每一列,是None
  • 每列打印的内容是一个副作用

要确认它运行xx = df.apply(print,axis=0) ,您将看到相同的打印输出。

然后运行print(xx),你会看到:

Seoul  Green    None
Busan  Red      None
       Green    None
dtype: object

即每列的打印调用只是None结果。


推荐阅读