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

Int*_*ing 7 python dictionary multi-index pandas

我想从Python collections.Counter字典中有效地创建一个pandas DataFrame ..但还有一个额外的要求.

计数器词典是这样的:

(a, b) : 5
(c, d) : 7
(a, d) : 2
Run Code Online (Sandbox Code Playgroud)

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

生成的DataFrame应如下所示:

   b  d
a  5  2
c  0  7
Run Code Online (Sandbox Code Playgroud)

对于较大的数据,我不想使用增长方法df[a][b]= 5等创建数据帧,因为每次完成这样的扩展时,它会创建新数据帧的副本(我不得不相信).

也许正确的答案是通过一个numpy阵列

cs9*_*s95 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
Run Code Online (Sandbox Code Playgroud)

使用DataFrame构造函数stack:

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

     b    d
a  5.0  2.0
c  NaN  7.0
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 6

使用Seriesunstack

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

输入数据

d={('a', 'b') : 5,
('c', 'd') : 7,
('a', 'd') : 2}
Run Code Online (Sandbox Code Playgroud)