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

如何在pd.pivot_table()中实现explode效果处理重复索引行?

解决方法:用组内序号配合pivot实现需求

pd.pivot_table的aggfunc参数只接受聚合类函数(比如sum、mean、list等),explode不属于合法的聚合函数,所以不能直接这么用。要实现你要的展开重复索引行的效果,可以按以下步骤操作:

  1. 先给每个group-panel组合的行添加组内序号,用来区分同一分组下的重复行
  2. 用pivot将数据整理成目标格式,最后去掉临时添加的序号索引

具体代码如下:

import pandas as pd

df = pd.DataFrame({
    "group": [1,2,2,3,1,2,3], 
    "panel": [1,1,1,1,2,2,2],
    "value": [0,1,2,3,4,5,6]
})

# 给每个group-panel组内的行添加序号
df['row_id'] = df.groupby(['group', 'panel']).cumcount()

# 执行pivot并去掉临时的row_id索引
result = df.pivot(
    index=['group', 'row_id'],
    columns='panel',
    values='value'
).droplevel('row_id')

# 调整列名格式(和期望结果对齐)
result.columns = pd.MultiIndex.from_product([['value'], result.columns])

# 可选:将数值转为整数(NaN会保留为float,这是pandas的特性)
result = result.astype(int, errors='ignore')

print(result)

运行后输出:

value   
panel     1    2
group           
1         0  4.0
2         1  5.0
2         2  NaN
3         3  6.0

如果需要把NaN显示为空或者调整数据类型,可以用result.fillna('').astype(int, errors='ignore')做进一步处理,不过pandas中整数列无法直接存储NaN,会自动转为float类型,这是正常现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:45:16