2016-10-15 114 views
2

獲取索引列表我已經通過各種網站和SO看着posts.Seems容易,但不知何故我堅持this.I我使用大熊貓從dataframe.loc

print frame.loc[(frame['RR'].str.contains("^[^123]", na=False)), 'RR'].isin(series1.str.slice(1)) 

得到

3  True 
4 False 
8 False 
Name: RR, dtype: bool 

現在,不知何故,我只想indexes,以便我可以在dataframe.drop中使用。基本上所有的指數值是True,我必須抓住indexesdrop them.Is還有沒有其他方式以及使用indexes

回答

1

您在同一列,以便這些可以組合(和否定)測試兩個條件:

frame[~((frame['RR'].str.contains("^[^123]", na=False)) & (frame['RR'].isin(series1.str.slice(1))))] 

這裏,之後~運營商,它檢查是否一個特定的行滿足兩個條件 - 同布爾你最終得到的數組。用~,你可以把True變成False,把False變成True。最後,frame[condition]返回滿足布爾索引的最終條件的行。

在一個更可讀的格式:

condition1 = frame['RR'].str.contains("^[^123]", na=False) 
condition2 = frame['RR'].isin(series1.str.slice(1)) 
frame[~(condition1 & condition2)] 

作爲替代(需要0.18.0),就可以得到真實的元素的索引有:

frame.loc[(frame['RR'].str.contains("^[^123]", na=False)), 'RR'].isin(series1.str.slice(1))[lambda df: df].index 
+0

因此,這兩個會考慮幀將有一百萬個條目更快 – vks

+1

最有可能是第一個。第二個返回另一個框架並測試另一個條件,只是爲了給出索引 - 然後需要在另一個方法中使用(drop)。我已經測試了一個小的數據框,第一個是更快的兩倍(不考慮丟棄部分)。當然,這可能會根據您在系列1中的條目,幀['RR']等等而改變。 – ayhan

+0

酷!非常感謝!!!你能分享一些關於'pandas'的好資源嗎?信息都是濺起來的...... – vks