如何从以(列,行)元组为键的字典创建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完全符合需求:
| a | b | |
|---|---|---|
| c | 1 | 2 |
| d | 3 | 4 |
方法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
相关产品推荐
相关产品推荐

