我想通过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数组?
答案 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)
将Series
与unstack
一起使用
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}