通过索引中的部分字符串匹配来选择行

ron*_*zon 10 python pandas

有一个这样的系列:

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

google        40
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
Run Code Online (Sandbox Code Playgroud)

我想选择'wiki'是索引标签一部分的行(部分字符串标签).

我试过的那一刻

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

wikimedia     22
wikipedia     10
wikitravel    33
Name: site, dtype: int64
Run Code Online (Sandbox Code Playgroud)

并且它完成了这项工作,但不知何故,索引像'列'一样哭泣...

有没有更好的方法呢?

And*_*den 11

一种有点厚颜无耻的方式可能是使用loc:

In [11]: ds.loc['wiki': 'wikj']
Out[11]:
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
Run Code Online (Sandbox Code Playgroud)

这基本上相当于ds[ds.index.map(lambda s: s.startswith('wiki'))].

要做,包含,正如@DSM建议的那样,写入可能更好:

ds[['wiki' in s for s in ds.index]]
Run Code Online (Sandbox Code Playgroud)

  • 有`ds.irow(Series(ds.index).str.contains("wiki"))`,但我想我更喜欢简单的`ds[['wiki' in x for x in ds.index]]`。顺便说一句,我认为这里潜伏着一些错误:`list(ds.str)` 似乎永远存在。 (3认同)

小智 6

使用的另一种解决方案filter,请参见此处

>>> ds.filter(like='wiki', axis=0)
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
Run Code Online (Sandbox Code Playgroud)