extraire la valeur de la colonne en fonction d'une autre colonne pandas dataframe

109

Je suis en quelque sorte coincé sur l'extraction de la valeur d'une variable conditionnée sur une autre variable. Par exemple, le dataframe suivant:

A  B
p1 1
p1 2
p3 3
p2 4

Comment puis-je obtenir la valeur de Aquand B=3? Chaque fois que j'ai extrait la valeur de A, j'ai obtenu un objet, pas une chaîne.

Anderson Zhu
la source
Je vois, je devrais ajouter item()à la fin.
Anderson Zhu
df.queryet pd.evalsemblent bien adaptés à ce cas d'utilisation. Pour plus d'informations sur la pd.eval()famille de fonctions, leurs fonctionnalités et leurs cas d'utilisation, veuillez visiter Évaluation des expressions dynamiques dans les pandas à l'aide de pd.eval () .
cs95

Réponses:

193

Vous pouvez utiliser locpour obtenir des séries qui satisfont votre condition, puis ilocpour obtenir le premier élément:

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
la source
24
Merci de votre aide. df.loc[df['B'] == 3, 'A'].item()fonctionne pour moi aussi.
Anderson Zhu
3
lequel choisit-il si la trame de données comporte plusieurs entrées de «3» dans la colonne B?
subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] fonctionne pour moi. Cet exemple permet de sélectionner plusieurs colonnes. Elles doivent être en tuple.
Mustafa Uçar
si df.loc [df ['B'] == 300, 'A']. iloc [0] signifie quelle sera la sortie?
user1999109
.item () est apparemment obsolète et sera supprimé. Y a-t-il une autre façon de faire cela? Je ne suis pas intéressé par le nom de la colonne ou du type de données qui est également retourné avec la méthode .loc à interroger.
Dan
41

Vous pouvez essayer query, ce qui est moins tapant:

df.query('B==3')['A']
PhilChang
la source
La requête est intéressante car nous pouvons également y ajouter des clauses plus complexes
Samir Baid
1
IMHO, c'est la meilleure réponse.
NLR
27

df[df['B']==3]['A'], en supposant que df est votre pandas.DataFrame.

émis
la source
Pouvez-vous s'il vous plaît donner un lien où exactement cette méthode est décrite dans la documentation officielle de pandas?
vasili111
Je veux dire une ][partie.
vasili111
11

Utilisez df[df['B']==3]['A'].valuessi vous voulez juste l'élément lui-même sans les crochets

Baz
la source
Pouvez-vous s'il vous plaît donner un lien où exactement cette méthode est décrite dans la documentation officielle de pandas? Je veux dire une ][partie.
vasili111
Il renvoie le résultat avec []
Sid
Vous devez encore mettre [0]à la fin pour accéder à la valeur.
rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

J'ai également travaillé sur ces opérations de clôture et d'extraction pour ma mission.

Dheeraj Pranav
la source