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 に答える
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 に答える