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

将DataFrame多值透视到列:解决透视后NaN及行数异常问题

解决Pivot后出现NaN及行数不符的问题

你的问题出在pivot的索引参数没包含time,导致分组逻辑错误,才会出现大量NaN且行数和原数据一致。

修正后的代码

首先,index需要包含所有用来区分唯一行的字段:index、time、type,这样才能正确按行分组,把test的唯一值转成列:

# 执行pivot并重置索引,去掉列名的层级
df_pvt = df.pivot(
    index=['index', 'time', 'type'],
    columns='test',
    values='value'
).reset_index().rename_axis(columns=None)

如果你的数据中存在(index, time, type, test)的重复组合(即同一分组下有多个value),pivot会报错,这时候改用pivot_table并指定聚合函数即可:

df_pvt = df.pivot_table(
    index=['index', 'time', 'type'],
    columns='test',
    values='value',
    aggfunc='mean'  # 可以根据需求换成sum、first等
).reset_index().rename_axis(columns=None)

为什么原代码不行?

你之前只把index和type作为索引,但time也是区分不同行的关键字段——同一个index+type下有多个time值,pivot会把每个time和test的组合都单独生成一行,自然行数和原数据一样,且如果某个time+test的组合不存在,就会出现NaN。

示例验证

用你给出的测试数据执行修正后的代码,会得到如下结果(和你的期望一致,其中你期望里test2的0.01行值应为0.113,是原数据的对应值):

indextimetest1test2type
00.000.1120.112A
10.010.1130.113A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:31:08