2016-09-22 120 views
0

我想查找「None」之前發生的這種行的索引。python中的特定行的索引值

pId=["a","b","c","None","d","e","None"] 
df = pd.DataFrame(pId,columns=['pId']) 

       pId 
0    a 
1    b 
2    c 
3   None 
4    d 
5    e 
6   None 

df.index[df.pId.eq('None') & df.pId.ne(df.pId.shift(-1))] 

我期待上面的代碼的輸出應該

Index([2,5]) 

它給了我

Index([3,6]) 

請指正

+0

看起來像你可以減少你的答案中的值。也許它返回索引'無'或可能它不是基於0來源 – nephi12

+0

對不起。我沒有得到你。是的,它返回'None'的索引而不是前一行的索引 – Prasad

+0

我的意思是,如果它返回的值始終高於您想要的值,您可以簡單地將值減1。否則,如果你想修復這個錯誤,那麼可能是由於你的代碼返回索引爲none時,如果你預期的索引值之前沒有?以及由Prune發佈的答案解釋我的意思是由起源(起始索引)而不是0 – nephi12

回答

1

我不知道該具體的例子你表現出來。無論如何,你可以用更簡單的方式做到這一點:

indexes = [i-1 for i,x in enumerate(pId) if x == 'None'] 
+0

謝謝! – Prasad

+0

'[i for i,x in enumerate(pId,-1)if x =='None']'會做同樣的事情 –

0

問題是你要返回「無」的索引。您比較它與上一個項目相比,但您仍在報告「無」的索引。請注意,您接受的答案不會進行此項檢查。

總之,您仍然需要在檢查結果上抹上「-1」。

+0

即使我使用shift也可以得到([3,6])-2 – Prasad

+0

You對了......讓我編輯一下...... – Prune

0

只是-1df[df["pId"] == "None"].index

import pandas as pd 

pId=["a","b","c","None","d","e","None"] 
df = pd.DataFrame(pId,columns=['pId']) 

print(df[df["pId"] == "None"].index - 1) 

它給你:

Int64Index([2, 5], dtype='int64') 

或者,如果你只是想值的列表:

(df[df["pId"] == "None"].index - 1).tolist() 

你應該知道的像這樣的列表:

pId=["None","None","b","c","None","d","e","None"] 

你得到像DF:

pId 
0 None 
1 None 
2  b 
3  c 
4 None 
5  d 
6  e 
7 None 

和輸出,如:

[-1, 0, 3, 6] 

不使意義很大。