2013-08-13 13 views
19

Mam następujący DataFrame:Uzyskiwanie indeksu liczb całkowitych wiersza Pandas DataFrame spełniającego warunek?

a b c 
b 
2 1 2 3 
5 4 5 6 

Jak widać, kolumna b jest używany jako wskaźnik. Chcę uzyskać numer porządkowy rzędu spełniającego ('b' == 5), który w tym przypadku byłby 1.

Testowana kolumna może być kolumną indeksową (jak w przypadku b w tym przypadku) lub zwykłą kolumną, np. Może chciałbym znaleźć indeks wiersza spełniający ('c' == 6).

Odpowiedz

19

Można użyć np.where tak:

import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.arange(1,7).reshape(2,3), 
        columns = list('abc'), 
        index=pd.Series([2,5], name='b')) 
print(df) 
# a b c 
# b   
# 2 1 2 3 
# 5 4 5 6 
print(np.where(df.index==5)[0]) 
# [1] 
print(np.where(df['c']==6)[0]) 
# [1] 

Wartość zwrócona jest tablicą, ponieważ nie może być więcej niż jeden wiersz w szczególności indeks lub wartość w kolumnie.

+7

Zamiast wykonywania 'np.where (df.index == 5) [0]', panda ma funkcję 'get_loc', która wydaje się być koszerniejsza. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.get_loc.html – hlin117

+1

@ hlin117 - Twój komentarz powinien być poprawną odpowiedzią, dodaj go. – ihadanny

20

Zamiast tego należy użyć Index.get_loc.

Ponownie wykorzystując skonfigurowany kod @ unutbu, uzyskasz identyczne wyniki.

>>> import pandas as pd 
>>> import numpy as np 


>>> df = pd.DataFrame(np.arange(1,7).reshape(2,3), 
        columns = list('abc'), 
        index=pd.Series([2,5], name='b')) 
>>> df 
    a b c 
b 
2 1 2 3 
5 4 5 6 
>>> df.index.get_loc(5) 
1 
+3

Tego nie chce OP. Odpowiadasz na pytanie "Jaka jest porządkowa lokalizacja danego indeksu?". OP chce wiedzieć: "Jaka jest porządkowa lokalizacja rzędu, który spełnia dany warunek?". Oznacza to, że wejście jest pewnym warunkiem, na przykład (df.b == 5) lub (df.c == 6). –

+0

OP powiedział: "Testowana kolumna może być kolumną indeksową (jak w tym przypadku b) lub zwykłą kolumną, np. Mogę chcieć znaleźć indeks wiersza spełniającego (" c "== 6)" – Pete

Powiązane problemy