具有如下所示的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']
...不起作用。
答案 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')]