[英]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
但这不合适
使用列表理解创建第一级MultiIndex
, range
为列表lst
长度和f-string
s。
然后通过列表的所有值使用主列表理解,将内部列表转换为DateFrame
s,通过DataFrame.set_index
按第一列创建索引,然后通过DataFrame.add_prefix
重命名列。
最后加入DataFrames的所有列表中concat
与keys
参数的第一级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.