我有一个带有MultiIndex的pandas数据帧。我想删除级别1
中值大于12
的所有列值。我能做到
df.drop([13, 14, 15, 16, 17, 18, 19, 20], level=1, axis=1, inplace=True)
但是这不会删除大于20的值。有没有办法将值限制为12?
答案 0 :(得分:2)
使用pd.IndexSlice
df.loc[:, pd.IndexSlice[:, :12]]
考虑df
mux = pd.MultiIndex.from_product([list('ab'), range(5,30,5)])
df = pd.DataFrame([np.arange(10)], columns=mux)
print(df)
a b
5 10 15 20 25 5 10 15 20 25
0 0 1 2 3 4 5 6 7 8 9
然后
df.loc[:, pd.IndexSlice[:, :12]]
a b
5 10 5 10
0 0 1 5 6
<强> 警告 强>
这要求对df.columns
进行排序。您可能需要提前排序
df.sort_index(axis=1).loc[:, pd.IndexSlice[:, :12]]