You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Pandas的pivot函数将DataFrame转换为指定格式?

当然可以实现!

直接用df.pivot(columns='store')没法一步到位得到你想要的格式,因为我们需要把color和size的所有唯一值合并成新的行索引,同时对重复组的quantity做求和,还要把缺失值补为0。下面是具体的实现方案:

1. 先回顾原始数据

我们先把你的原始代码和DataFrame列出来:

import pandas as pd
data = dict(store=['A', 'B', 'B'], color=['red', 'black', 'black'], size=['small', 'medium', 'small'], quantity=[2, 4, 1])
df = pd.DataFrame(data)

对应的原始DataFrame:

storecolorsizequantity
0Aredsmall2
1Bblackmedium4
2Bblacksmall1

2. 分步实现目标格式

我们需要分别处理color和size维度的聚合,再合并结果:

第一步:用pivot_table分别聚合color和size

pivot_table比pivot更适合这里,因为它支持聚合重复组的数值,还能直接填充缺失值:

# 按color聚合,store为列,求和quantity,缺失值填0
color_agg = df.pivot_table(index='color', columns='store', values='quantity', aggfunc='sum', fill_value=0)

# 按size聚合,同样的逻辑
size_agg = df.pivot_table(index='size', columns='store', values='quantity', aggfunc='sum', fill_value=0)

第二步:合并两个聚合结果

用pd.concat把两个DataFrame的行合并起来,就得到你要的格式了:

final_df = pd.concat([color_agg, size_agg])

3. 最终结果

运行上面的代码后,final_df的输出就是:

A  B
red      2  0
black    0  5
small    2  1
medium   0  4

为什么不用直接的df.pivot(columns='store')?

因为pivot是基于唯一的行-列组合来重塑数据的,它不支持聚合操作——如果遇到重复的行-列组合(比如你的数据里B店出现了两次black),pivot会直接报错。而pivot_table正好解决了这个问题,还能一键处理缺失值填充,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者ajrlewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:22:46