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

如何将Pandas DataFrame中字典列表列的指定值转换为列名生成宽表

Pandas 字典列表列转宽表实现方案

以下两种方案均可实现需求,可根据数据量选择对应方法:

方法1:字典映射展开法(适合中小数据量)

写法简洁,直接对每行的字典列表做映射转换后展开:

import pandas as pd

# 你提供的测试数据生成代码可直接复用
df = pd.DataFrame([[1, [
    {'id': 1144801690551941, 'value': 20},
    {'id': 8202109018383881, 'value': 26},
    {'id': 3025222222235562, 'value': 37},
    {'id': 5834245818862827, 'value': 35},
    {'id': 4689782481420271, 'value': 27},
    {'id': 7385168421196875, 'value': 56},
    ]], [2, [
    {'id': 1144801690551941, 'value': 25},
    {'id': 8202109018383881, 'value': 26},
    {'id': 3025222222235562, 'value': 38},
    {'id': 5834245818862827, 'value': 35},
    {'id': 4689782481420271, 'value': 21},
    {'id': 7385168421196875, 'value': 53},
    ]], [3, [
    {'id': 1144801690551941, 'value': 20},
    {'id': 8202109018383881, 'value': 29},
    {'id': 3025222222235562, 'value': 37},
    {'id': 5834245818862827, 'value': 32},
    {'id': 4689782481420271, 'value': 27},
    {'id': 7385168421196875, 'value': 50},
    ]]], columns=['column1', 'column2'])

# 核心转换代码
result = pd.concat([
    df['column1'],
    df['column2'].apply(lambda x: {item['id']: item['value'] for item in x}).apply(pd.Series)
], axis=1)

方法2:展开透视法(适合大数据量)

采用Pandas向量化操作,避免行级循环开销,数据量越大性能优势越明显:

result = df.explode('column2') \
           .assign(
               id=lambda x: x['column2'].str['id'],
               value=lambda x: x['column2'].str['value']
           ) \
           .pivot(index='column1', columns='id', values='value') \
           .reset_index()
# 清除pivot生成的列名索引标记
result.columns.name = None

两种方法输出结果完全一致,均符合预期格式要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:18:02