webentwicklung-frage-antwort-db.com.de

Erhalten Sie den ganzzahligen Index einer Pandas DataFrame-Zeile, die eine Bedingung erfüllt?

Ich habe den folgenden DataFrame:

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

Wie Sie sehen, wird die Spalte b als Index verwendet. Ich möchte die Ordnungszahl der Zeile erhalten, die ('b' == 5) erfüllt, was in diesem Fall 1 wäre.

Die getestete Spalte kann entweder eine Indexspalte sein (wie in diesem Fall mit b) oder eine reguläre Spalte, z. Ich möchte den Index der Zeile finden, der ('c' == 6) erfüllt.

27
Dun Peal

Sie könnten np.where wie folgt verwenden:

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]

Der zurückgegebene Wert ist ein Array, da sich in einer Spalte möglicherweise mehr als eine Zeile mit einem bestimmten Index oder Wert befinden.

26
unutbu

Verwenden Sie stattdessen Index.get_loc .

Wenn Sie den Setup-Code von @ unutbu erneut verwenden, erzielen Sie dieselben Ergebnisse.

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

Mit Index.get_loc und allgemeiner Bedingung:

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