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

如何从以(列,行)元组为键的字典创建Pandas DataFrame?

解决方法

方法1:直接转换重塑(最简便)

先把字典转成以元组为索引的Series,再用unstack()一键得到目标结构:

import pandas as pd

# 先定义变量(假设a、b、c、d是字符串或其他可哈希类型)
a, b, c, d = 'a', 'b', 'c', 'd'
dictionary = {(a,c): 1, (a,d): 3, (b,c): 2, (b,d): 4}

# 核心转换步骤
s = pd.Series(dictionary)
df = s.unstack()

生成的DataFrame完全符合需求:

ab
c12
d34

方法2:用df.at[]逐个赋值(对应你的思路)

如果坚持用at[]赋值,得先创建指定行列的空DataFrame,再拆分字典的元组键来定位:

import pandas as pd

a, b, c, d = 'a', 'b', 'c', 'd'
dictionary = {(a,c): 1, (a,d): 3, (b,c): 2, (b,d): 4}

# 先创建空DataFrame,指定行索引和列名
df = pd.DataFrame(index=[c, d], columns=[a, b])

# 遍历字典,拆分元组键赋值
for (col_name, row_idx), val in dictionary.items():
    df.at[row_idx, col_name] = val

注意:你的字典键是(列名, 行索引),所以at[]的顺序要写成df.at[行索引, 列名],和你之前写的df.at[a,c]顺序相反,这是关键。

方法3:from_dict直接构造

也可以用from_dict配合转置实现:

import pandas as pd

a, b, c, d = 'a', 'b', 'c', 'd'
dictionary = {(a,c): 1, (a,d): 3, (b,c): 2, (b,d): 4}

df = pd.DataFrame.from_dict(dictionary, orient='index', columns=['value']).unstack(0)
df.columns = df.columns.droplevel(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:03:23