多索引列-选择内部

时间:2018-09-10 14:19:43

标签: python pandas

具有如下所示的DataFrame:

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']

...不起作用。

2 个答案:

答案 0 :(得分:2)

这是多个索引,您可以使用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

答案 1 :(得分:2)

xs

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

struct Child: Codable {
    let sub_key1: String?
    let sub_key2: String?
    let sub_key3: String?
    let used: Bool?
}

或者保持水平

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']

swaplevel

我不喜欢这种方式,但是对于提供信息有用

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