2
votes

obtenir des données d'une autre trame de données par rapport à l'index

Je souhaite créer une colonne avec des données d'un autre dataframe basé sur un index.

Par exemple, j'ai un dataframe ci-dessous:

['M','M','M','f','M','f','M','M','f','M']

En utilisant ces deux dataframe, Je veux créer une colonne dans df1 appelée «gender» et obtenir les données de df2 en fonction de son index. Donc ma colonne 'gender' dans df1 ressemblera à ceci:

import numpy as np
import pandas as pd    

df1={'id':[1,1,1,3,5,6,7,8,9,10], 'name':['a','a','a','c','e','f','g','h','i','j']}

df2 = {'id':[1,2,3,4,5,6,7,8,9,10], 'age':[21,11,45,11,56,22,26,26,17,32], 'gender':['M','M','f','f','M','f','M','M','f','M']}

df1 = pd.DataFrame(df1)
df1.set_index('id', inplace = True)

df2 = pd.DataFrame(df2)
df2.set_index('id', inplace = True)


0 commentaires

3 Réponses :


3
votes

C'est très simple. Faites simplement:

df1['gender'] = df2['gender']

Puisque vous avez déjà défini correctement les index, les pandas feront exactement ce que vous voulez. Essayez et voyez.


1 commentaires

Excellent exemple pour montrer comment l'index fonctionne dans l'attribution de colonne



1
votes

Vous pouvez fusionner votre df1 et df2 sur l'index:

df1.merge(df2, left_index=True, right_index=True)

   name  age gender
id
1     a   21      M
1     a   21      M
1     a   21      M
3     c   45      f
5     e   56      M
6     f   22      f
7     g   26      M
8     h   26      M
9     i   17      f
10    j   32      M

Notez que comment est 'interne' par défaut et vous pouvez le changer en 'left' devrait être nécessaire.


0 commentaires

2
votes

Essayez ceci.

df1.join(df2['gender'])


0 commentaires