【问题标题】:Create MultiIndex pandas DataFrame from dictionary with tuple keys使用元组键从字典创建 MultiIndex pandas DataFrame
【发布时间】: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 数组

【问题讨论】:

    标签: python pandas dictionary multi-index


    【解决方案1】:

    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}
    

    【讨论】:

    • 好的,有趣。我没有这样做,因为我不确定它是否会形成元组索引或 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
    

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2019-02-10
      • 2021-01-29
      • 2021-03-08
      • 2015-10-29
      • 1970-01-01
      • 2023-02-24
      • 2021-12-13
      • 2015-08-03
      相关资源
      最近更新 更多