web-dev-qa-db-fra.com

comment concaténer deux trames de données avec des noms de colonnes différents dans les pandas? - python

df1 = pd.DataFrame({'a':[1,2,3],'x':[4,5,6],'y':[7,8,9]})
df2 = pd.DataFrame({'b':[10,11,12],'x':[13,14,15],'y':[16,17,18]})

J'essaye de fusionner les deux trames de données en utilisant les clés du df1. Je pense que je devrais utiliser pd.merge pour cela, mais comment puis-je dire à pandas de placer les valeurs dans la colonne b de df2 dans la colonne a de df1. Voici la sortie que j'essaie d'atteindre:

    a   x   y
0   1   4   7
1   2   5   8
2   3   6   9
3   10  13  16
4   11  14  17
5   12  15  18
14
HappyPy

Utilisez simplement concat et rename la colonne pour df2 donc il aligne:

In [92]:
pd.concat([df1,df2.rename(columns={'b':'a'})], ignore_index=True)

Out[92]:
    a   x   y
0   1   4   7
1   2   5   8
2   3   6   9
3  10  13  16
4  11  14  17
5  12  15  18

de même, vous pouvez utiliser merge mais vous devez renommer la colonne comme ci-dessus:

In [103]:
df1.merge(df2.rename(columns={'b':'a'}),how='outer')

Out[103]:
    a   x   y
0   1   4   7
1   2   5   8
2   3   6   9
3  10  13  16
4  11  14  17
5  12  15  18
19
EdChum

Utilisez numpy pour concaténer les cadres de données, vous n'avez donc pas à renommer toutes les colonnes (ou ignorer explicitement les index). np.concatenate fonctionne également sur un nombre arbitraire de trames de données.

df = pd.DataFrame( np.concatenate( (df1.values, df2.values), axis=0 ) )
df.columns = [ 'a', 'x', 'y' ]
df
7
scottlittle