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.


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'

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

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.


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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.