假设你有很多命名的索引级别——我将在这里显示4,但请发挥你的想象力:
midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1'],['C0','C1'],['D0','D1']],names=['quack','woof','honk','snarf'])
dfmi = pd.DataFrame(np.arange(32).reshape((len(midx), len(columns))),index=midx, columns=columns)
dfmi
foo bar
quack woof honk snarf
A0 B0 C0 D0 0 1
D1 2 3
C1 D0 4 5
D1 6 7
B1 C0 D0 8 9
D1 10 11
C1 D0 12 13
D1 14 15
A1 B0 C0 D0 16 17
D1 18 19
C1 D0 20 21
D1 22 23
B1 C0 D0 24 25
D1 26 27
C1 D0 28 29
D1 30 31
然后,在这条线的某个地方,您忘记了名称“snarf”与哪个级别编号相关,甚至忘记了有多少个级别,您想做如下操作:
dfmi[dfmi.snarf=='D1']
除了数据帧很大,所以保留另一个外,reset_index
的复制会占用太多空间,而且速度很慢,而且,由于懒惰,您不想查找它,也不想使用query
进行另一种语法:
dfmi.query('snarf'=='D1')
哎呀
dfmi.query("'snarf'=='D1'")
哎呀
dfmi.query("snarf=='D1'")
foo bar
quack woof honk snarf
A0 B0 C0 D1 2 3
C1 D1 6 7
B1 C0 D1 10 11
C1 D1 14 15
A1 B0 C0 D1 18 19
C1 D1 22 23
B1 C0 D1 26 27
C1 D1 30 31
终于
不确定这是否更方便,但基于字符串的查询的一种替代方法是使用
index.get_level_values
:您还可以使用:
输出:
如果我们通过名称在给定级别内查找相应的值(相等比较),那么^{} 可以工作:
相关问题 更多 >
编程相关推荐