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

如何基于列配置数据:将pivot_table输出改为显示原始data值而非计数

问题与解决方法

原始数据

data={'x':[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,0,0,0],'y':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],
  'subx':[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3],'suby':[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3],
  'data':[10,20,10,10,11,13,13,15,12,13,14,12,14,12,12,13,11,20,14,47]}

原代码与当前输出

原代码:

df=pd.DataFrame(data)
table=pd.pivot_table(data=df,index=['y','suby'],columns=['x','subx'],values=['data'],aggfunc='count')

当前输出:

data                                ...                                    
x         0                   1            ...    2              3                
subx      0    1    2    3    0    1    2  ...    1    2    3    0    1    2    3
y suby                                     ...                                    
0 0     1.0  NaN  NaN  NaN  1.0  NaN  NaN  ...  NaN  NaN  NaN  1.0  NaN  NaN  NaN
  1     NaN  1.0  NaN  NaN  NaN  1.0  NaN  ...  1.0  NaN  NaN  NaN  1.0  NaN  NaN
  2     NaN  NaN  1.0  NaN  NaN  NaN  1.0  ...  NaN  1.0  NaN  NaN  NaN  1.0  NaN
  3     NaN  NaN  NaN  1.0  NaN  NaN  NaN  ...  NaN  NaN  1.0  NaN  NaN  NaN  1.0
1 0     1.0  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  1     NaN  1.0  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  2     NaN  NaN  1.0  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  3     NaN  NaN  NaN  1.0  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN

需求

将输出中显示1.0的位置替换为原始data列的对应数值,空位置保留NaN,期望输出如下:

x         0                   1            ...
subx      0    1    2    3    0    1    2  ... 
y suby                                     ...
0 0     10  NaN  NaN  NaN  11  NaN  NaN  ...
  1     NaN  20  NaN  NaN  NaN  13  NaN  ... 
  2     NaN  NaN  10  NaN  NaN  NaN  13  ... 
  3     NaN  NaN  NaN  10  NaN  NaN  NaN  ... 
1 0     11  NaN  NaN  NaN  NaN  NaN  NaN  ...  
  1     NaN  20  NaN  NaN  NaN  NaN  NaN  ... 
  2     NaN  NaN  14  NaN  NaN  NaN  NaN  ...  
  3     NaN  NaN  NaN  47  NaN  NaN  NaN  ... 

解决方案

问题出在aggfunc='count',该函数统计分组内非空值的数量,因此得到1.0。由于你的分组(y,suby,x,subx)每组仅对应一个data值,只需改用取单值的聚合函数即可:

方法1:修改pivot_table的聚合函数

df = pd.DataFrame(data)
table = pd.pivot_table(data=df, index=['y','suby'], columns=['x','subx'], values=['data'], aggfunc='first')

方法2:直接使用pivot函数

因为你的行列组合是唯一的,pivot函数更适合这种场景,无需指定聚合函数:

table = df.pivot(index=['y','suby'], columns=['x','subx'], values='data')

两种方法都能得到期望的输出,对应位置显示原始data数值,空位置为NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:35:22