2016-09-22 69 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] 

不使意义很大。

相关问题