2016-09-22 15 views
0

"なし"が発生する前に、このような行のインデックスを調べようとしています。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))] 

私は上記のコードの出力は、それは私が具体的な例を確認していない私に

+0

あなたの答えの値を減らすことができるようです。多分それは0の起源に基づいていないか、またはおそらくその "なし"のインデックスを返しています – nephi12

+0

申し訳ありません..私はあなたを取得しませんでした。はい、先行行のインデックスではなく、「なし」のインデックスを返します – Prasad

+0

値が一貫して1つ上回っていれば、値を1つだけ減らすことができます。それ以外の場合は、バグを修正したい場合は、コードがnoneのインデックスを返す前に値のインデックスを期待したときにそれを返します。よく、プルーンによって投稿された答えは、0ではない起点(開始インデックス)の意味を説明しています – nephi12

答えて

1

を修正してください私に

Index([3,6]) 

与え

Index([2,5]) 

でなければなりません期待していますあなたは示しました。とにかく、あなたはもっと簡単な方法でそれをやることができます:

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

ありがとう、それは動作します! – Prasad

+0

'私はiのために、xは列挙する(pId、-1)x == 'None']なら同じ事をします –

0

問題は「なし」のインデックスを返していることです。 と前の項目を比較しますが、あなたはまだ「なし」のインデックスを報告しています。あなたの受け入れられた答えはこのチェックをしないことに注意してください。

要するに、あなたのチェックの結果に "-1"を塗りつぶす必要があります。

+0

シフト-2を使用してもまだ([3,6])を返します – Prasad

+0

「そうです...私はそれを編集しましょう... – Prune

0

だけ-1df[df["pId"] == "None"].indexから:

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

するか、あなただけの値のリストをしたい場合:あなた与え

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) 

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

あなたは注意する必要がありますのためのもの次のようなリスト:

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

と出力のように:

[-1, 0, 3, 6] 

感覚の多くを作成しません

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

はあなたのようなDFを取得します。

関連する問題