使用元组键从字典创建 MultiIndex pandas DataFrame
Posted
技术标签:
【中文标题】使用元组键从字典创建 MultiIndex pandas DataFrame【英文标题】:Create MultiIndex pandas DataFrame from dictionary with tuple keys 【发布时间】:2019-06-13 00:16:06 【问题描述】:我想从 Python collections.Counter 字典高效地创建 pandas DataFrame .. 但还有一个额外的要求。
Counter 字典如下所示:
(a, b) : 5
(c, d) : 7
(a, d) : 2
那些字典键是元组,其中第一个成为行,第二个成为数据框的列。
生成的 DataFrame 应如下所示:
b d
a 5 2
c 0 7
对于较大的数据,我不想使用增长方法 df[a][b]= 5
等创建数据框,因为每次完成此类扩展时它都会创建新数据框的副本(我可以相信)。
也许正确的答案是通过 numpy 数组?
【问题讨论】:
【参考方案1】:将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
【讨论】:
好的,有趣。我没有这样做,因为我不确定它是否会形成元组索引或 MultiIndex。猜猜这也适用于最新版本。好! 感谢大家的帮助,也感谢未来的读者,此页面使堆栈/unstack 变得清晰 nikgrozev.com/2015/07/01/…【参考方案2】:我会使用MultiIndex.from_tuples
创建一个Series
,然后使用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
【讨论】:
以上是关于使用元组键从字典创建 MultiIndex pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章