14

有一个这样的系列:

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

它完成了这项工作,但不知何故,索引为“包含”而哭泣,就像列所具有的一样......

有更好的方法吗?

4

3 回答 3

16

一个有点厚颜无耻的方法可能是使用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 所建议的那样,要做包含,写成这样可能会更好:

ds[['wiki' in s for s in ds.index]]
于 2013-05-17T20:37:01.257 回答
12

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

>>> ds.filter(like='wiki', axis=0)
wikimedia     22
wikipedia     10
wikitravel    33
dtype: int64
于 2017-09-20T08:48:00.297 回答
0

从原来的问题:

“...索引像列所具有的那样为'包含'而哭泣”。

我不确定这是什么时候添加的(这是一个老问题),但是您现在可以使用contains假设index.str您的索引是字符串类型:

>>> import pandas as pd
>>>
>>> ds = pd.Series({'wikipedia':10,'wikimedia':22,'wikitravel':33,'google':40})
>>> ds[ds.index.str.contains("wiki")]

wikipedia     10
wikimedia     22
wikitravel    33
dtype: int64
于 2021-12-03T10:35:20.380 回答