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阵列?
我会创建一个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)
使用Series与unstack
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)
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |