来自数据帧列表的Pandas多索引和堆栈

时间:2018-04-06 20:18:44

标签: python database pandas stack

我有3个列表,比如A,B和& C看起来像这样:

A = ["Jan", "Feb", "Mar"]
B = ["location1", "location2", "location3"]
C = [pd.DataFrame(np.random.randn(2, 3), columns=list('ABC'))]*3

如何创建具有3级索引的多索引数据框,即A,B和C的两个索引(0到1)?

我到目前为止所尝试的是通过循环遍历所有3个列表和数据帧列来创建包含所有三个索引的字典,然后,当我必须切片数据时,再次使用条件循环键。这有效,但似乎效率很低,因为我的词典中有1000万个项目。我想知道是否有使用multiindex和stack的单线程Pandas语法。我看到了这些文档,但语法还不清楚。我错过了任何其他可以帮助解决此问题的Pandas功能吗?我应该使用数据库吗?

1 个答案:

答案 0 :(得分:2)

IIUC:
See my post on pd.concat for more information
Or the documentation

pd.concat(C, keys=list(zip(A, B)), axis=1)

        Jan                           Feb                           Mar                    
  location1                     location2                     location3                    
          A         B         C         A         B         C         A         B         C
0 -0.519821 -1.820451 -0.645732 -0.519821 -1.820451 -0.645732 -0.519821 -1.820451 -0.645732
1  1.043477 -0.666565 -0.298504  1.043477 -0.666565 -0.298504  1.043477 -0.666565 -0.298504

可选地

pd.concat(dict(zip(zip(A, B), C)), axis=1)