python - 带有 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”相同的差异?你能给我解释一下吗?
解决方案
当您沿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结果。
推荐阅读
- javascript - 更新 DataTable 中的嵌套 JSON 数据
- r - 使用 RVest 获取表中的链接 HTML 文本
- ajax - 使用 CORS 到 API 网关的 AJAX POST 不起作用
- react-native - Facebook 横幅广告未在世博会中显示
- php - Mercado API:mercado 没有市场代码 USDC/BRL
- android - 初始屏幕上的图像未显示
- php - 网页抓取 PHP CSS 样式
- sql - SQL Server 行级安全错误消息 33504
- javascript - 如何按“原始顺序”组装 JavaScript 异步获取结果
- javascript - 过渡:在 svg 元素上变换