Python 按索引中的部分字符串匹配选择行

Python 按索引中的部分字符串匹配选择行,python,pandas,Python,Pandas,有这样一个系列: ds = Series({'wikipedia':10,'wikimedia':22,'wikitravel':33,'google':40}) google 40 wikimedia 22 wikipedia 10 wikitravel 33 dtype: int64 我想选择“wiki”是索引标签(部分字符串标签)一部分的行 就在我尝试的那一刻 ds[ds.index.map(lambda x: 'wiki' in x)] wiki

有这样一个系列:

ds = Series({'wikipedia':10,'wikimedia':22,'wikitravel':33,'google':40})

google        40
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
我想选择“wiki”是索引标签(部分字符串标签)一部分的行

就在我尝试的那一刻

ds[ds.index.map(lambda x: 'wiki' in x)]

wikimedia     22
wikipedia     10
wikitravel    33
Name: site, dtype: int64
它确实起到了作用,但不知何故,索引需要“contains”,就像列一样


有没有更好的方法呢?

有点厚脸皮的方法可以是使用
loc

In [11]: ds.loc['wiki': 'wikj']
Out[11]:
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
这本质上相当于
ds[ds.index.map(lambda s:s.startswith('wiki'))]

正如@DSM所建议的那样,To do contains写为:

ds[['wiki' in s for s in ds.index]]

另一种使用
过滤器的解决方案,请参阅:


嘿,这是个好把戏,没错,但它只做“startwith”操作。不是“包含”。或者我错了吗?有
ds.irow(Series(ds.index).str.contains(“wiki”))
,但我想我更喜欢简单的
ds[[wiki'在x中代表x在ds.index]]]
。顺便说一句,我认为这里潜伏着一些错误:
list(ds.str)
似乎永远不会消失。@DSM认为我无论如何都会把它弄出来。@DSM<代码>列表(ds.str)
不会崩溃。谢谢!:)另外一个是@DSM ds[[s中的“wiki”代表ds.index中的s]]“感觉”最好/最灵活。
>>> ds.filter(like='wiki', axis=0)
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64