estrarre il valore della colonna in base a un altro dataframe panda di colonna


109

Mi sto bloccando sull'estrazione del valore di una variabile che condiziona un'altra variabile. Ad esempio, il seguente dataframe:

A  B
p1 1
p1 2
p3 3
p2 4

Come posso ottenere il valore di Aquando B=3? Ogni volta che ho estratto il valore di A, ho ottenuto un oggetto, non una stringa.


Capisco, dovrei aggiungere item()alla fine.
Anderson Zhu

df.querye pd.evalsembrano buoni per questo caso d'uso. Per informazioni sulla pd.eval()famiglia di funzioni, le loro caratteristiche e i casi d'uso, visita la pagina Valutazione delle espressioni dinamiche nei panda utilizzando pd.eval () .
cs95

Risposte:


193

Potresti usare locper ottenere serie che soddisfino la tua condizione e poi ilocper ottenere il primo elemento:

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'

24
Grazie per l'aiuto. df.loc[df['B'] == 3, 'A'].item()funziona anche per me.
Anderson Zhu

3
quale sceglie se il data frame ha più voci di "3" nella colonna B?
subhash

1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] funziona per me. Questo esempio per selezionare più colonne. Dovrebbero essere in tupla.
Mustafa Uçar

se df.loc [df ['B'] == 300, 'A']. iloc [0] significa quale sarà l'output?
user1999109

.item () apparentemente è stato deprecato e verrà rimosso. c'è un altro modo per fare ciò? Non mi interessa il nome della colonna o del tipo di dati che viene restituito anche con il metodo .loc da interrogare.
Dan

40

Puoi provare query, che è meno digitando:

df.query('B==3')['A']

La query è interessante perché possiamo aggiungere anche clausole più complesse
Samir Baid

1
IMHO, questa è la risposta migliore.
NLR

27

df[df['B']==3]['A'], supponendo che df sia il tuo pandas.DataFrame.


Puoi per favore fornire un link dove esattamente questo metodo è descritto nella documentazione ufficiale di Panda?
vasili111

Intendo ][parte.
vasili111

11

Usa df[df['B']==3]['A'].valuesse vuoi solo l'oggetto stesso senza le parentesi


Puoi per favore fornire un link dove esattamente questo metodo è descritto nella documentazione ufficiale di Panda? Intendo ][parte.
vasili111

Restituisce il risultato con []
Sid

Hai ancora bisogno di mettere [0]alla fine per accedere al valore.
rubebop

0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Ho anche lavorato a queste operazioni di reclusione ed estrazione per il mio incarico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.