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.