web-dev-qa-db-fra.com

Obtenir l'index entier d'une ligne Pandas DataFrame remplissant une condition?

J'ai le DataFrame suivant:

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

Comme vous pouvez le constater, la colonne b est utilisée comme index. Je veux obtenir le nombre ordinal de la ligne remplissant ('b' == 5), qui dans ce cas serait 1.

La colonne en cours de test peut être une colonne d'index (comme avec b dans ce cas) ou une colonne normale, par exemple Je souhaiterais peut-être trouver l'index de la ligne remplissant le ('c' == 6).

27
Dun Peal

Vous pouvez utiliser np.where comme ceci:

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]

La valeur renvoyée est un tableau car il peut y avoir plus d'une ligne avec un index ou une valeur particulier dans une colonne.

26
unutbu

Utilisez Index.get_loc à la place.

En réutilisant le code de configuration de @ unutbu, vous obtiendrez les mêmes résultats.

>>> 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
29
hlin117

Avec Index.get_loc et condition générale:

>>> 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(df.index[df['b'] == 5][0])
1
1
Gabriele Picco