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

时间:2020-02-13 12:32:47

标签: python python-3.x pandas

我有这样的结构:

[
  [
    ('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

但这不适合

1 个答案:

答案 0 :(得分:1)

使用列表推导来创建MultiIndex的{​​{1}}的第一级,其中列表range的长度为lst s。

然后使用list的所有值进行主列表理解,并将内部列表转换为f-string,按DataFrame.set_index按第一列创建索引,然后按DataFrame.add_prefix重命名列。

DateFrame的第一级中,最后通过concatkeys参数连接DataFrames的所有列表,并通过DataFrame.rename_axis删除索引名称MultiIndex

0