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

如何对包含列表值列的Pandas DataFrame执行透视转换得到目标宽表

问题原因

你之前使用pivot_table出现B列被跳过的问题,是因为pivot_table默认会对值列执行均值聚合,列表类型无法参与数值运算,会被自动过滤。


解决方案1:使用pivot(推荐,适配你的场景)

你的数据中每个i和name的组合仅有唯一一行,不需要聚合,直接用pivot即可完整保留所有值,包括列表:

# 核心转换代码
df_pivot = df.pivot(index='i', columns='name', values=['A', 'B'])
# 按照「name值_原列名」规则拼接列名
df_pivot.columns = [f"{col[1]}_{col[0]}" for col in df_pivot.columns]
# 调整列顺序并把i从索引恢复为普通列
df_pivot = df_pivot.reset_index()[['x_A', 'x_B', 'y_A', 'y_B', 'z_A', 'z_B', 'i']]

运行后得到的结果完全符合要求,B列的列表值会完整保留。


解决方案2:自定义pivot_table聚合规则(兼容多值场景)

如果你的实际业务中存在同一个i和name对应多行数据的情况,可以给pivot_table指定自定义聚合函数,避免列表被过滤:

# 自定义aggfunc取分组内第一个值,可根据需求调整为列表拼接等逻辑
df_pivot = df.pivot_table(
    index='i', 
    columns='name', 
    values=['A', 'B'], 
    aggfunc=lambda x: x.iloc[0]
)
# 后续列名拼接、顺序调整逻辑和方案1完全一致
df_pivot.columns = [f"{col[1]}_{col[0]}" for col in df_pivot.columns]
df_pivot = df_pivot.reset_index()[['x_A', 'x_B', 'y_A', 'y_B', 'z_A', 'z_B', 'i']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:27:01