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

如何从pandas透视表提取值?解决取值代码报错问题

Pandas透视表取值问题解决

问题描述

我是pandas新手,在尝试从透视表提取值时遇到问题。我的代码如下:

pivot = sp.pivot_table(
    index="story_points",
    values=["duration"],
    aggfunc={"min", "mean", "median", "max", "count"},
)
df = pivot.iloc[:, "duration"]
zero = df.iloc[0, "median"]
one = df.iloc[1.0, "median"]
two = df.iloc[2.0, "median"]
three = df.iloc[3.0, "median"]

生成的透视表输出为:

duration                                            
                    count         max       mean     median       min
story_points_raw                                                     
1.0                   227  185.125382   7.241453   2.190405  0.000139
2.0                   144   68.849965  11.048451   6.106875  0.000058
3.0                    45  126.131181  19.560792  13.558588  0.983241
4.0                    16   49.043889  11.948981   6.932321  1.878125
5.0                     5  128.653403  44.487847  15.489850  2.935891
8.0                     8   79.792199  31.325800  17.299543  7.774792

在df = pivot.iloc[:, "duration"]这一行出现报错,请问是否有更合适的建表方式,方便直接访问所需值?

错误原因

iloc是基于整数位置的索引,不能用来访问列名(比如"duration"),你需要用loc或者直接通过多级列索引的方式取值。另外你的透视表输出索引是story_points_raw,但代码里设置的index参数是story_points,存在列名不匹配的问题。

解决方案

方案1:直接通过多级列索引提取数据

无需额外转换DataFrame,直接从透视表按索引和多级列名取值:

# 修正索引列名,和输出匹配
pivot = sp.pivot_table(
    index="story_points_raw",
    values=["duration"],
    aggfunc={"min", "mean", "median", "max", "count"},
)

# 用loc按索引值访问,列用多级索引元组指定
one = pivot.loc[1.0, ("duration", "median")]
two = pivot.loc[2.0, ("duration", "median")]
three = pivot.loc[3.0, ("duration", "median")]

# 提取所有median值可直接取对应多级列
median_series = pivot[("duration", "median")]

方案2:扁平化多级列索引,简化访问

把多级列名合并为单层,后续访问更直观:

pivot = sp.pivot_table(
    index="story_points_raw",
    values=["duration"],
    aggfunc={"min", "mean", "median", "max", "count"},
)

# 扁平化列名,生成如"duration_count"、"duration_median"的单层列名
pivot.columns = ['_'.join(col) for col in pivot.columns]

# 直接用单层列名访问
one = pivot.loc[1.0, "duration_median"]
two = pivot.loc[2.0, "duration_median"]

# 提取所有median值
median_series = pivot["duration_median"]

方案3:调整透视表参数,明确聚合规则

通过字典形式定义aggfunc,更清晰地指定列与聚合函数的对应关系:

pivot = sp.pivot_table(
    index="story_points_raw",
    values=["duration"],
    aggfunc={
        "duration": ["min", "mean", "median", "max", "count"]
    }
)
# 后续可选择扁平化列名,或直接用多级索引访问

注意点

  • 确保index参数对应的列名与实际数据一致,否则会导致索引不匹配。
  • iloc仅支持整数位置索引,按名称访问需用loc或直接列索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:30:41