熊猫:在一个级别过滤列

时间:2016-12-28 20:05:24

标签: python pandas dataframe

我有一个带有MultiIndex的pandas数据帧。我想删除级别1中值大于12的所有列值。我能做到

df.drop([13, 14, 15, 16, 17, 18, 19, 20], level=1, axis=1, inplace=True)

但是这不会删除大于20的值。有没有办法将值限制为12?

1 个答案:

答案 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]]