187 votes

Modifier une valeur en fonction d'une autre valeur dans pandas

J'essaie de reproduire mon code Stata en Python, et on m'a orienté vers Pandas. Cependant, j'ai du mal à comprendre comment traiter les données.

Supposons que je veuille passer en revue toutes les valeurs de l'en-tête de la colonne "ID" ; si l'ID correspond à un nombre spécifique, je veux modifier les deux valeurs correspondantes FirstName (nom) et LastName (prénom).

Dans Stata, cela ressemble à ceci :

replace FirstName = "Matt" if ID==103
replace LastName =  "Jones" if ID==103

Ainsi, toutes les valeurs de FirstName correspondant à des valeurs d'ID == 103 sont remplacées par Matt.

Dans Pandas, j'essaie quelque chose comme ceci

df = read_csv("test.csv")
for i in df['ID']:
    if i ==103:
          ...

Je ne sais pas trop où aller à partir de maintenant. Vous avez des idées ?

1voto

Gabriel Cia Points 67

Si quelqu'un cherche un moyen de modifier les valeurs de plusieurs lignes en fonction d'une condition logique de chaque ligne, l'utilisation de la fonction .apply() avec une fonction est la meilleure solution.

df = pd.DataFrame({'col_a':[0,0], 'col_b':[1,2]})

   col_a  col_b
0      0      1
1      0      2

def func(row):
    if row.col_a == 0 and row.col_b <= 1:
        row.col_a = -1
        row.col_b = -1
    return row

df.apply(func, axis=1)

   col_a  col_b
0     -1     -1 # Modified row
1      0      2

Bien que .apply() est généralement utilisé pour ajouter une nouvelle ligne/colonne à un cadre de données, mais il peut être utilisé pour modifier les valeurs des lignes/colonnes existantes.

0voto

J'ai trouvé qu'il était beaucoup plus facile de faire des débuts en imprimant l'endroit où chaque ligne remplit la condition :

for n in df.columns:
    if(np.where(df[n] == 103)):
        print(n)
        print(df[df[n] == 103].index)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X