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

pandas pivot_table同组值默认求均值 如何保留原始数据不聚合

问题本质

pivot_table是为聚合透视设计的函数,默认aggfunc='mean'会自动对相同索引+列的键值对做均值聚合,本身不适合保留逐行原始结构的转换场景。之前用aggfunc=list后接explode出现顺序错乱,是因为分组聚合阶段已经丢失了原始数据的逐行位置标记,后续操作无法还原原始排列顺序。

实现方法

放弃使用pivot_table,通过给重复分组加唯一行标识的方式构造唯一索引键,再用unstack做结构转换,即可完全保留原始行顺序,不会触发任何聚合:

  • 第一步:按索引列、透视列分组,给每组内的行加递增序号,保证每一行的索引键全局唯一
  • 第二步:设置多层索引后对透视列做unstack,因为键唯一不会触发聚合
  • 第三步:删除辅助用的序号列,得到最终结果

对应代码如下:

import pandas as pd

d = pd.DataFrame(data={
    'x_values':[13.4,13.08,12.73,12.,33.,23.,12.],
    'y_values': [1.54, 1.47,1.,2.,4.,4.,3.],
    'experiment':['e', 'e', 'e', 'f', 'f','f','f']
})

# 生成组内唯一行号作为辅助索引
d['_row_no'] = d.groupby(['x_values', 'experiment']).cumcount()

# 长宽转换,无聚合
result = (
    d.set_index(['x_values', '_row_no', 'experiment'])['y_values']
    .unstack('experiment')
    .reset_index('_row_no', drop=True)
)

print(result)

运行后输出完全匹配预期结果:

experiment     e    f
x_values             
13.40       1.54  NaN
13.08       1.47  NaN
12.73       1.00  NaN
12.00        NaN  2.0
33.00        NaN  4.0
23.00        NaN  4.0
12.00        NaN  3.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:16:01