Extrahieren Sie den Spaltenwert basierend auf einem anderen Spalten-Pandas-Datenrahmen

109

Ich stecke beim Extrahieren des Werts einer Variablenkonditionierung für eine andere Variable fest. Zum Beispiel der folgende Datenrahmen:

A  B
p1 1
p1 2
p3 3
p2 4

Wie kann ich den Wert von Awann ermitteln B=3? Jedes Mal, wenn ich den Wert von extrahierte A, bekam ich ein Objekt, keine Zeichenfolge.

Anderson Zhu
quelle
Ich verstehe, ich sollte item()am Ende hinzufügen .
Anderson Zhu
df.queryund pd.evalscheinen gut für diesen Anwendungsfall zu passen. Informationen zur pd.eval()Funktionsfamilie, ihren Funktionen und Anwendungsfällen finden Sie unter Auswertung dynamischer Ausdrücke in Pandas mit pd.eval () .
CS95

Antworten:

192

Sie könnten verwenden loc, um Serien zu erhalten, die Ihren Zustand erfüllen, und dann ilocdas erste Element zu erhalten:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'
Anton Protopopov
quelle
23
Danke für Ihre Hilfe. df.loc[df['B'] == 3, 'A'].item()funktioniert auch bei mir.
Anderson Zhu
3
Welches wird ausgewählt, wenn der Datenrahmen mehrere Einträge von '3' in Spalte B enthält?
Subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] funktioniert für mich. Dieses Beispiel für die Auswahl mehrerer Spalten. Sie sollten in Tupel sein.
Mustafa Uçar
Wenn df.loc [df ['B'] == 300, 'A']. iloc [0] bedeutet, was wird ausgegeben?
user1999109
38

Sie können versuchen query, was weniger tippt:

df.query('B==3')['A']
PhilChang
quelle
Abfrage ist interessant, weil wir auch komplexere Klauseln hinzufügen können
Samir Baid
1
IMHO, das ist die beste Antwort.
NLR
27

df[df['B']==3]['A']Angenommen, df ist Ihr pandas.DataFrame.

emittiert
quelle
Können Sie bitte einen Link angeben, wo genau diese Methode in der offiziellen Dokumentation von pandas beschrieben ist?
vasili111
Ich meine ][Teil.
vasili111
11

Verwenden df[df['B']==3]['A'].valuesSie diese Option, wenn Sie nur das Element selbst ohne die Klammern möchten

Baz
quelle
Können Sie bitte einen Link angeben, wo genau diese Methode in der offiziellen Dokumentation von pandas beschrieben ist? Ich meine ][Teil.
vasili111
Das Ergebnis wird mit []
Sid
Sie müssen noch [0]am Ende setzen, um auf den Wert zuzugreifen.
Rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Ich habe auch an diesen Klausel- und Extraktionsoperationen für meinen Auftrag gearbeitet.

Dheeraj Pranav
quelle