Python “字符串”;包括「-基于多索引的切片

Python “字符串”;包括「-基于多索引的切片,python,pandas,Python,Pandas,如何根据多索引的字符串内容对其进行切片?即,该特定索引是否包含某个字符串 In [12]: df = pd.DataFrame({'a': ['a', 'ab', 'b'], 'c': ['d', 'd', 'd'], 'val': [1, 2 , 3]}).set_index(['a', 'c']) In [13]: df Out[13]: val a c a d 1 ab d 2 b

如何根据多索引的字符串内容对其进行切片?即,该特定索引是否包含某个字符串

In [12]: df = pd.DataFrame({'a': ['a', 'ab', 'b'], 
                   'c': ['d', 'd', 'd'], 
                   'val': [1, 2 , 3]}).set_index(['a', 'c'])

In [13]: df

Out[13]:

val
a   c   
a   d   1
ab  d   2
b   d   3

In [15]: df.xs('a', level='a', drop_level=False)

Out[15]:

val
a   c   
a   d   1

In[16]: df.xs(contains('a'), level='a', drop_level=False)
预期产出:

Out[16]: 

a   c   
a   d   1
ab  d   2
显然,最后一点是不可能的

  • 如何才能做到优雅
  • 你能不能用一些不区分大小写的方法
与和一起使用:

当索引级别不重要时,另一种方法是将
df.filter(…)
与正则表达式一起使用;在按列或行浏览数据时非常有用。例如,这将以更少的代码给出相同的答案:

df.filter(regex=re.compile('A',re.I),axis=0)

但是,这在所有索引级别进行过滤,
df.filter(regex=re.compile('D',re.I),axis=0)
将查看索引“c”,并显示以下内容:

另一种方法是使用:

DataFrame的DataFrame.index和DataFrame.columns属性 默认情况下,实例放置在查询命名空间中,这允许 您需要将框架的索引和列都视为中的列 框架

哪个IMO比其他IMO更具可读性和简洁性

>>> df[df.index.get_level_values('a').str.contains('a')]

谢谢相当多的…
>>> 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')]