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