2013-05-17 57 views
6

有一系列這樣的:大熊貓:如何通過局部標籤索引選擇

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

google  40 
wikimedia  22 
wikipedia  10 
wikitravel 33 
dtype: int64 

我想選擇其中「維基」是索引標籤的一部分行(部分字符串標籤) 。

目前我試過

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

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

和它的工作,但不知何故,該指數喊「包含」就像什麼柱有...

什麼更好的辦法來做到這一點?

回答

10

一個有點厚臉皮的方法可以是使用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]] 
+0

嘿,漂亮的把戲,這是真的,但它只是'開始'的操作。不是'包含'。或者我錯了? – ronszon

+0

不,你是對的...... –

+1

有'ds.irow(Series(ds.index).str.contains(「wiki」))'',但我認爲我更喜歡簡單的'ds [['wiki'in x代表ds.index中的x]]'。順便說一句,我認爲在這裏潛伏着一些bug:'list(ds.str)'似乎永遠持續下去。 – DSM

1

使用filter另一種解決方案,請參閱here

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