多索引列 - 选择内部



具有如下所示的数据帧:

frame = pd.DataFrame(np.arange(12).reshape((4, 3)),
....:                      index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
....:                      columns=[['Ohio', 'Ohio', 'Colorado'],
....:                               ['Green', 'Red', 'Green']])

选择所有绿色列的最简单方法是什么?

frame['Green']

。不起作用。

xs

此方法就是为此目的而设计的。

frame.xs('Green', axis=1, level=1)
# frame.xs('Green', 1, 1)
Ohio  Colorado
a 1     0         2
2     3         5
b 1     6         8
2     9        11

或保持水平

frame.xs('Green', axis=1, level=1, drop_level=False)
Ohio Colorado
Green    Green
a 1     0        2
2     3        5
b 1     6        8
2     9       11

这大致相当于:
显然更复杂,但很有趣。

frame.loc[:, frame.columns.get_level_values(1) == 'Green']

frame.loc[:, frame.columns.labels[1] == frame.columns.levels[1].get_loc('Green')]

swaplevel

我不喜欢这种方式,但有利于提供信息的目的

frame.swaplevel(0, 1, 1).Green
Ohio  Colorado
a 1     0         2
2     3         5
b 1     6         8
2     9        11

这是多索引,可以使用IndexSlice

frame.loc[:,pd.IndexSlice[:,'Green']]
Out[506]: 
Ohio Colorado
Green    Green
a 1     0        2
2     3        5
b 1     6        8
2     9       11

最新更新