Python 带多索引的数据帧:检查索引级别中是否包含字符串
假设我有一个多索引熊猫数据帧,看起来像下面的一个,取自 看起来是这样的:Python 带多索引的数据帧:检查索引级别中是否包含字符串,python,pandas,Python,Pandas,假设我有一个多索引熊猫数据帧,看起来像下面的一个,取自 看起来是这样的: 0 1 2 3 bar one -0.096648 -0.080298 0.859359 -0.030288 two 0.043107 -0.431791 1.923893 -1.544845 baz one 0.639951 -0.008833 -0.227000 0.042315 two 0.705281 0.
0 1 2 3
bar one -0.096648 -0.080298 0.859359 -0.030288
two 0.043107 -0.431791 1.923893 -1.544845
baz one 0.639951 -0.008833 -0.227000 0.042315
two 0.705281 0.446257 -1.108522 0.471676
foo one -0.579483 -2.261138 -0.826789 1.543524
two -0.358526 1.416211 1.589617 0.284130
qux one 0.498149 -0.296404 0.127512 -0.224526
two -0.286687 -0.040473 1.443701 1.025008
现在,我只想要多索引的第二级中包含“ne”的行
有没有办法为(部分)包含的字符串分割多索引?您可以应用如下掩码:
df = df.iloc[df.index.get_level_values(1).str.contains('ne')]
返回:
bar one -0.143200 0.523617 0.376458 -2.091154
baz one -0.198220 1.234587 -0.232862 -0.510039
foo one -0.426127 0.594426 0.457331 -0.459682
qux one -0.875160 -0.157073 -0.540459 -1.792235
编辑:
也可以在多个级别上应用逻辑掩码,例如:
df = df.iloc[(df.index.get_level_values(0).str.contains('ba')) | (df.index.get_level_values(1).str.contains('ne'))]
返回:
bar one 0.620279 1.525277 0.379649 -0.032608
two 0.465240 -0.190038 0.795730 1.720368
baz one 0.986828 -0.080394 -0.303319 0.747483
two 0.487534 1.597006 0.114551 0.299502
foo one -0.085700 0.112433 0.704043 0.264280
qux one -0.291758 -1.071669 0.794354 -1.805530
是否也可以将遮罩应用于两个级别?我已经尝试过df=df.iloc[df.index.get_-level_-values(0).str.contains('ba'),df.index.get_-level_-values(1).str.contains('ne')],但这不起作用。我想你可以做一个类似
df=df.iloc[(df.index.get_-level_-values(0).str.contains('ba')));(df.index.get_-level_-values('ba')))。(df.index.get_-level-values('。或者取决于你需要什么。
bar one 0.620279 1.525277 0.379649 -0.032608
two 0.465240 -0.190038 0.795730 1.720368
baz one 0.986828 -0.080394 -0.303319 0.747483
two 0.487534 1.597006 0.114551 0.299502
foo one -0.085700 0.112433 0.704043 0.264280
qux one -0.291758 -1.071669 0.794354 -1.805530