2013-05-17 12 views
6

uwzględniając szereg takiego:pandy: jak wybrać poprzez częściowe etykiecie w indeksie

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

google  40 
wikimedia  22 
wikipedia  10 
wikitravel 33 
dtype: int64 

Chciałbym zaznaczyć wiersze gdzie „wiki” jest częścią etykiety Index (częściowy etykiecie napis) .

Na razie próbowałem

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

wikimedia  22 
wikipedia  10 
wikitravel 33 
Name: site, dtype: int64 

i spełnia swoje zadanie, ale jakoś indeks płacze „zawiera”, podobnie jak to, co kolumny mają ...

lepszy sposób to zrobić ?

Odpowiedz

10

Nieco bezczelny sposób mogłoby być użycie loc:

In [11]: ds.loc['wiki': 'wikj'] 
Out[11]: 
wikimedia  22 
wikipedia  10 
wikitravel 33 
dtype: int64 

Jest to zasadniczo równoważne ds[ds.index.map(lambda s: s.startswith('wiki'))].

W tym zawiera, jak sugeruje @DSM, to chyba ładniej napisać jak:

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

He, ładne sztuczki, to prawda, ale działa tylko "startwith". Nie "zawiera". Czy ja się mylę? – ronszon

+0

Nie masz racji ... –

+1

Istnieje 'ds.irow (Series (ds.index) .str.contains (" wiki "))', ale myślę, że wolę proste 'ds [['wiki' w x dla x w ds.indeksie]] '. BTW, myślę, że są tu jakieś błędy: 'list (ds.str)' wydaje się trwać wiecznie. – DSM

1

Innym rozwiązaniem użyciu filter patrz here:

>>> ds.filter(like='wiki', axis=0) 
wikimedia  22 
wikipedia  10 
wikitravel 33 
dtype: int64 
Powiązane problemy