繁体   English   中英

将元组列表转换为 MultiIndex pandas 数据框

[英]Converting lists of lists of tuples to MultiIndex pandas dataframe

我有这样的结构:

[
  [
    ('2019-12-01', '0.03555', '0.03', '0.03', '0.03'), 
    ('2019-12-02', '0.03', '0.03', '1', '0.03')
  ],
  [
    ('2019-12-01', '0.111', '0.02', '0.03', '0.03'), 
    ('2019-12-02', '0.03', '0.03', '0.03', '0.03')
  ]
]

我希望每个列表条目都是 Pandas 数据框中的一个索引,元组是 df 中的行。 像这样的东西:

                         LIST_1                      LIST_2
         date      p1    p2     p3    p4    |   p1    p2     p3    p4
0   2019-12-01  0.03555  0.03  0.03   0.03  | 0.03  0.03  0.03   0.03
1   2019-12-02     0.03  0.03     1   0.03  | 0.03  0.03  0.03   0.03

我知道这很混乱,老实说,我不确定在 Pandas 中构建它的最佳方式,因为我不熟悉它,所以任何建议将不胜感激。

我尝试使用以下方法压平结构:

d = pd.DataFrame([t for lst in a for t in lst])

但是后来我最终得到了一个 df ,就像这样:

        0          1     2     3      4
0   2019-12-01  0.03555  0.03  0.03   0.03
1   2019-12-02     0.03  0.03     1   0.03
2   2019-12-01    0.111  0.02  0.03   0.03
3   2019-12-02     0.03  0.03  0.03   0.03

但这不合适

使用列表理解创建第一级MultiIndexrange为列表lst长度和f-string s。

然后通过列表的所有值使用主列表理解,将内部列表转换为DateFrame s,通过DataFrame.set_index按第一列创建索引,然后通过DataFrame.add_prefix重命名列。

最后加入DataFrames的所有列表中concatkeys参数的第一级MultiIndex和删除索引名0通过DataFrame.rename_axis

L = [f'LIST_{i}' for i in range(1, len(lst)+1)]
df = (pd.concat([pd.DataFrame(x).set_index(0).add_prefix('p') for x in lst], axis=1, keys=L)
        .rename_axis(None))
print (df)
             LIST_1                   LIST_2                  
                 p1    p2    p3    p4     p1    p2    p3    p4
2019-12-01  0.03555  0.03  0.03  0.03  0.111  0.02  0.03  0.03
2019-12-02     0.03  0.03     1  0.03   0.03  0.03  0.03  0.03

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM