2 votes

Comment remplacer les colonnes dont le nom correspond

Je sais que cela peut être très simple, mais je n'arrive pas à trouver comment le faire.

J'ai un df avec plusieurs colonnes que je veux remplacer, mais disons que j'ai un df comme ceci :

df1:

   A   B
0  a   22
1  b   44 
2  c   100
3  d   6
4  e   12

Et un autre df

df2:

   B
0  11
1  22 
2  50
3  3
4  6

Mon df souhaité est

df1:

   A   B
0  a   11
1  b   22 
2  c   50
3  d   3
4  e   6

De plus, je ne veux pas le faire un par un, car j'ai plusieurs colonnes.

4voto

jezrael Points 290608

Si la longueur et les index sont les mêmes pour les deux df :

df1['B'] = df2.B

Si nécessaire, il suffit d'ajouter des valeurs :

df1['B'] = df2.B.values

Si nécessaire, remplacez d'autres colonnes :

df1 = pd.DataFrame({'A':[1,2,3],
                   'B':[3,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5]})

print (df1)
   A  B  C  D
0  1  3  7  1
1  2  5  8  3
2  3  6  9  5

df2 = pd.DataFrame({'A':[7,8,9],
                   'B':[1,6,5],
                   'C':[5,6,6],
                   'D':[7,3,6]})

print (df2)
   A  B  C  D
0  7  1  5  7
1  8  6  6  3
2  9  5  6  6

df1[['B', 'C', 'D']] = df2[['B', 'C', 'D']]
print (df1)
   A  B  C  D
0  1  1  5  7
1  2  6  6  3
2  3  5  6  6

2voto

W.R. Points 536

Le code ci-dessous est grossier, et pourrait être amélioré, mais dites-moi d'abord si cela fait ce que vous voulez. Supposons que la longueur d'un dataframe soit supérieure à celle de l'autre :

def replace(dfa, dfb):
    a_ = [match for match in df1.columns.values if match in df2.columns.values]
    if len(dfa.columns) > len(dfb.columns):
        for value in a_:
            dfa[[value]] = dfb[[value]] 
    else:
        for value in a_:
            dfb[[value]] = dfb[[value]]

Vous pourriez tester avec votre df1 et df2

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