python - 如何在熊猫的数据透视表中聚合
问题描述
我在熊猫中有以下数据框
code date tank nozzle qty amount
123 2018-01-01 1 1 100 0
123 2018-01-01 1 2 0 50
123 2018-01-01 1 2 0 50
123 2018-01-01 1 2 100 0
123 2018-01-02 1 1 0 70
123 2018-01-02 1 1 0 50
123 2018-01-02 1 2 100 0
我想要的数据框是
code date tank nozzle_1_qty nozzle_2_qty nozzle_1_amount nozzle_2_amount
123 2018-01-01 1 100 100 0 100
123 2018-01-02 1 0 100 120 0
我正在关注熊猫..
df= (df.pivot_table(index=['date', 'tank'], columns='nozzle',
values=['qty','amount']).add_prefix('nozzle_')
.reset_index()
)
但是,这并没有给我我想要的输出。
解决方案
pivot_table
is中的默认聚合函数np.mean
,因此有必要将其更改为sum
然后MultiIndex
在列表理解中展平:
df = df.pivot_table(index=['code','date', 'tank'],
columns='nozzle',
values=['qty','amount'], aggfunc='sum')
#python 3.6+
df.columns = [f'nozzle_{b}_{a}' for a, b in df.columns]
#python bellow
#df.columns = ['nozzle_{}_{}'.format(b,a) for a, b in df.columns]
df = df.reset_index()
print (df)
code date tank nozzle_1_amount nozzle_2_amount nozzle_1_qty \
0 123 2018-01-01 1 0 100 100
1 123 2018-01-02 1 120 0 0
nozzle_2_qty
0 100
1 100
推荐阅读
- python - 当我发送 get 请求时,响应不被理解
- javascript - 使用指数调试小型 javascript
- google-cloud-platform - 如何重新分析 GCP IAM 角色以识别多余的权限?
- bash - 如果远程机器上已经存在文件名,如何更改文件名?
- flask - 与 SocketIO 一起使用时,永远不会调用 Flask MQTT on_connect
- node.js - 如何利用 coinbase、blockchain.com 等第三方 API 开发加密交换
- postgresql - 调试由 pgbench 执行的查询
- apache-kafka - 如何处理kafka消费者失败
- java - 我应该分开从测试界面抛出错误的测试函数吗?
- node.js - 匹配路由时节点代理源重写