如何通过字符串内容对MultiIndex进行切片?即该特定索引是否包含某个字符串?
Out[16]:
a c
a d 1
ab d 2
预期产出:
pd.DataFrame(
pd.factorize(df.values.ravel())[0].reshape(len(df), -1) + 1,
df.index, df.columns
)
显然最后一点是不可能的。
答案 0 :(得分:3)
将boolean indexing
与get_level_values
和str.contains
一起使用:
print (df.index.get_level_values('a'))
Index(['a', 'ab', 'b'], dtype='object', name='a'
print (df.index.get_level_values('a').str.contains('a'))
[ True True False]
df1 = df[df.index.get_level_values('a').str.contains('a', case=False)]
print (df1)
val
a c
a d 1
ab d 2
答案 1 :(得分:0)
当索引级别不重要 时,另一种方法是将df.filter(...)
与正则表达式结合使用;按列或行浏览数据时超级有帮助。例如,这将以较少的代码为您提供相同的答案:
df.filter(regex=re.compile('A',re.I),axis=0)
但是,此过滤器将在所有索引级别进行过滤,df.filter(regex=re.compile('D',re.I),axis=0)
将查看索引“ c”,并显示以下内容:
答案 2 :(得分:0)
另一种方法是使用query
:
DataFrame 的 DataFrame.index 和 DataFrame.columns 属性 实例默认放置在查询命名空间中,这允许 您将框架的索引和列都视为 框架。
>>> df.query('a.str.contains("a")')
val
a c
a d 1
ab d 2
哪个国际海事组织比
更具可读性和简洁性>>> df[df.index.get_level_values('a').str.contains('a')]