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.


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'

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

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.


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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.