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

Python:将字典转换为DataFrame并保留字典键为单独列

刚好碰到过类似的需求,给你几个简便的实现方法,都是pandas里常用的技巧,能快速得到你想要的结果:

方法1:使用pd.melt(最直观易理解)

先把字典转成常规的宽表DataFrame,再用melt来做“逆透视”转换,完美匹配你的需求:

import pandas as pd

example_d = {'R1':[1,2,3,4],'R2':[5,6,7,8],'R3':[10,10,10,10]}

# 第一步:转成常规宽表
df = pd.DataFrame(example_d)
# 第二步:用melt拆解,指定列名并调整顺序
result = df.melt(var_name='R_value', value_name='value')
# 可选:按R_value排序并重置索引,和你示例的顺序一致
result = result.sort_values('R_value').reset_index(drop=True)

print(result)

melt的作用就是把原来的列名(R1/R2/R3)放到var_name指定的R_value列,把每列里的所有值拆成单独的行,放到value列,完全符合你的要求。

方法2:使用from_dict+stack(一步到位更高效)

这种方法不用先转宽表,直接从字典一步生成目标结构:

import pandas as pd

example_d = {'R1':[1,2,3,4],'R2':[5,6,7,8],'R3':[10,10,10,10]}

result = (pd.DataFrame.from_dict(example_d, orient='index')
          .stack()  # 把列层级拆成行
          .reset_index()  # 把索引转成列
          .rename(columns={'level_0':'R_value', 0:'value'})  # 重命名列
          .drop('level_1', axis=1)  # 删掉多余的中间索引列
          .sort_values('R_value').reset_index(drop=True))

print(result)

orient='index'会把字典的键作为行索引,值列表作为列;stack()则会把每一行的多个值拆成单独的行记录,最后整理列名就搞定了。

方法3:列表推导式构造数据(适合小规模数据)

如果你的字典数据量不大,也可以先手动构造出目标格式的列表,再转成DataFrame,代码更简洁:

import pandas as pd

example_d = {'R1':[1,2,3,4],'R2':[5,6,7,8],'R3':[10,10,10,10]}

# 用列表推导式遍历每个键和对应的值列表,生成(value, R_value)的元组
data = [(val, key) for key, vals in example_d.items() for val in vals]
# 直接转成DataFrame并调整顺序
result = pd.DataFrame(data, columns=['value', 'R_value']).sort_values('R_value').reset_index(drop=True)

print(result)

这种方法逻辑最直白,新手也能一眼看懂,就是把每个值和它所属的键一一配对,再转成表格。

这三种方法都能得到你想要的结果,根据自己的习惯和数据规模选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:32:38