使用元组键从字典创建MultiIndex pandas DataFrame

时间:2019-01-18 17:37:51

标签: python pandas dictionary multi-index

我想通过Python collections.Counter 字典有效地创建 pandas DataFrame 。但是还有其他要求。

计数器字典如下:

(a, b) : 5
(c, d) : 7
(a, d) : 2

这些字典键是元组,其中第一个将成为数据帧的行,第二个将成为数据帧的列。

生成的 DataFrame 应该如下所示:

   b  d
a  5  2
c  0  7

对于较大的数据,我不想使用增长方法df[a][b]= 5等创建数据框,因为效率极低,因为每次完成此类扩展后,它都会创建新数据框的副本(我是让我们相信)。

也许正确的答案是通过 numpy数组

2 个答案:

答案 0 :(得分:6)

我会先使用Series创建一个MultiIndex.from_tuples,然后再使用unstack

keys, values = zip(*counter.items())
idx = pd.MultiIndex.from_tuples(keys)

pd.Series(values, index=idx).unstack(-1, fill_value=0)

   b  d
a  5  2
c  0  7

DataFrame构造函数与stack一起使用:

pd.DataFrame(counter, index=[0]).stack().loc[0].T

     b    d
a  5.0  2.0
c  NaN  7.0

答案 1 :(得分:6)

Seriesunstack一起使用

pd.Series(d).unstack(fill_value=0)
Out[708]: 
   b  d
a  5  2
c  0  7

输入数据

d={('a', 'b') : 5,
('c', 'd') : 7,
('a', 'd') : 2}