如何在多标头熊猫数据框中的顶级列上进行迭代

时间:2018-07-13 13:31:18

标签: python python-3.x pandas dataframe multidimensional-array

我有一个多标头数据帧,看起来像这样:

              SPY                           ARKW                     
              Open            High           Open          High       
               Bid     Ask     Bid     Ask    Bid    Ask    Bid    Ask
Date                                                                  
2018-07-03  272.86  272.87  272.97  272.98  56.00  56.35  56.24  56.63
2018-07-02  269.49  269.51  272.04  272.05  54.87  55.21  56.04  56.09
2018-06-29  272.09  272.12  273.66  273.67  55.58  55.95  55.95  56.07

我想遍历所有顶级列,因此在这种情况下SPY和ARKW因此我尝试:

for column in df:
    print(column)

但也会在较低级别的列上进行迭代:

('SPY', 'Open', 'Bid')
('SPY', 'Open', 'Ask')
('SPY', 'High', 'Bid')
('SPY', 'High', 'Ask')
('ARKW', 'Open', 'Bid')
('ARKW', 'Open', 'Ask')
('ARKW', 'High', 'Bid')
('ARKW', 'High', 'Ask')

如何遍历顶级列,然后为每个选择的“打开出价”列进行迭代?

1 个答案:

答案 0 :(得分:2)

我认为不需要使用循环slicers

idx = pd.IndexSlice
df1 = df.loc[:, idx[:, 'Open', 'Bid']]
print (df1)
               SPY   ARKW
              Open   Open
               Bid    Bid
2018-07-03  272.86  56.00
2018-07-02  269.49  54.87
2018-06-29  272.09  55.58

或使用DataFrame.xs

df1 = df.xs(('Open', 'Bid'), level=[1, 2], axis=1) 
print (df1)
               SPY   ARKW
2018-07-03  272.86  56.00
2018-07-02  269.49  54.87
2018-06-29  272.09  55.58

df1 = df.xs(('Open', 'Bid'), level=[1, 2], axis=1, drop_level=False) 
print (df1)
               SPY   ARKW
              Open   Open
               Bid    Bid
2018-07-03  272.86  56.00
2018-07-02  269.49  54.87
2018-06-29  272.09  55.58

编辑:

为了获得更好的性能,必须对MultiIndex中的所有值进行排序:

df = df.sort_index(axis=1)
相关问题