[英]Subselect by columns in MultiIndex Pandas DataFrame
我有一個看起來像這樣的數據框:
u1 u2 u3 u4 u5 u6
level0 level1
foo1 x1 0 1 0 0 0 0
x2 0 1 1 0 1 1
foo2 x3 0 1 0 1 0 1
x4 1 0 0 0 1 1
foo3 x5 1 0 1 0 0 0
x6 0 1 1 1 0 0
foo4 x7 1 0 0 1 0 1
x8 0 1 1 1 0 0
我只想子選擇那些u3==1
索引。 所以,作為輸出,我應該得到類似的東西:
u1 u2 u3 u4 u5 u6
level0 level1
foo1
x2 0 1 1 0 1 1
foo2
foo3 x5 1 0 1 0 0 0
x6 0 1 1 1 0 0
foo4
x8 0 1 1 1 0 0
我試過這樣做:
idx = pd.IndexSlice
df.loc[idx[:,:],'u2']==1
這使:
level0 level1
foo1 x1 True
x2 True
foo2 x3 True
x4 False
foo3 x5 False
x6 True
foo4 x7 False
x8 True
但我不知道如何使用它來索引原始數據框。
任何幫助表示贊賞。
In [11]: df.query('u2 == 1')
Out[11]:
u1 u2 u3 u4 u5 u6
level0 level1
foo1 x1 0 1 0 0 0 0
x2 0 1 1 0 1 1
foo2 x3 0 1 0 1 0 1
foo3 x6 0 1 1 1 0 0
foo4 x8 0 1 1 1 0 0
In [12]: df.loc[df['u2'] == 1]
Out[12]:
u1 u2 u3 u4 u5 u6
level0 level1
foo1 x1 0 1 0 0 0 0
x2 0 1 1 0 1 1
foo2 x3 0 1 0 1 0 1
foo3 x6 0 1 1 1 0 0
foo4 x8 0 1 1 1 0 0
使用.query()
方法還允許您按索引級別進行搜索:
In [17]: df.query("level0 in ['foo2','foo3'] and u2 == 1")
Out[17]:
u1 u2 u3 u4 u5 u6
level0 level1
foo2 x3 0 1 0 1 0 1
foo3 x6 0 1 1 1 0 0
更新:
我怎樣才能選擇所有的你? 其中 x1==1 和 x3==1?
如果你的意思是u1
和u3
那么有很多方法可以實現:
In [8]: df.query("u1 == 1 and u3 == 1")
Out[8]:
u1 u2 u3 u4 u5 u6
level0 level1
foo3 x5 1 0 1 0 0 0
In [9]: df.loc[(df['u1'] == 1) & (df['u3'] == 1)]
Out[9]:
u1 u2 u3 u4 u5 u6
level0 level1
foo3 x5 1 0 1 0 0 0
In [10]: df.loc[df[['u1','u3']].eq(1).all(1)]
Out[10]:
u1 u2 u3 u4 u5 u6
level0 level1
foo3 x5 1 0 1 0 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.