将具有多个键值的字典映射到数据框

时间:2021-05-04 18:06:20

标签: python pandas

我有一个包含多个键值的字典。

d = {(0, 0, 'Shift 2 (2000 FT)'): 0.0, (0, 0, 'Shift 1 (0800 FT)'): 0.0, (0, 1, 'Shift 2 (2000 FT)'): 0.0, (0, 1, 'Shift 1 (0800 FT)'): 0.0, (0, 2, 'Shift 2 (2000 FT)'): 0.0, (0, 2, 'Shift 1 (0800 FT)'): 0.0}

我想将其转换为数据框,如下所示,其中第一个索引称为“WEEK”,第二个称为“DAY”,第三个索引为列。

enter image description here

请指教。谢谢!

2 个答案:

答案 0 :(得分:5)

您可以读入字典,然后将索引转换为多索引并重塑。

import pandas as pd

df = pd.DataFrame.from_dict(d, orient='index')
df.index = pd.MultiIndex.from_tuples(df.index)

df = (df[0].unstack(-1)
           .rename_axis(index=['Week', 'Day'])
           .reset_index())

   Week  Day  Shift 1 (0800 FT)  Shift 2 (2000 FT)
0     0    0                0.0                0.0
1     0    1                0.0                0.0
2     0    2                0.0                0.0

您还可以使用普通构造函数一次性创建带有 MultiIndex 的初始 DataFrame。然后进行拆垛。

df = pd.DataFrame(data=d.values(), index=d.keys())

答案 1 :(得分:3)

另一种选择:创建列表的平面列表,然后使用 pivot_table

from itertools import chain
df = pd.DataFrame([list(chain(*[list(key),[val]])) for key,val in d.items()])
df = df.pivot_table(index=[0,1], columns=2).reset_index()
df.columns = ['Week','Day','Shift 1 (0800 FT)','Shift 2 (2000 FT)']