我有一个多标头数据帧,看起来像这样:
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')
如何遍历顶级列,然后为每个选择的“打开出价”列进行迭代?
答案 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)