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