2015-12-13 5 views

Répondre

0

Utilisez pandas géants de fusion:

import pandas as pd 

df1 = pd.DataFrame({ 
    'ID': ['a', 'b', 'c'], 
    'Value': [45, 3, 10] 
}) 

df2 = pd.DataFrame({ 
    'ID': ['a', 'b', 'c', 'd', 'e'], 
    'ID_n': [3, 35, 0, 7, 1], 
}) 

df1.set_index(['ID'], drop=False, inplace=True) 
df2.set_index(['ID'], drop=False, inplace=True) 

print pd.merge(df1, df2, on="ID", how='left') 

sortie:

ID Value ID_n 
0 a  45  3 
1 b  3 35 
2 c  10  0 
0

Vous pouvez utiliser join(),

In [14]: df1.join(df2) 
Out[14]: 
    Value ID_n 
ID    
a  45  3 
b  3 35 
c  10  0 

Si vous désirez que votre index soit numérique vous pourriez reset_index(),

In [17]: df1.join(df2).reset_index() 
Out[17]: 
    ID Value ID_n 
0 a  45  3 
1 b  3 35 
2 c  10  0 
0

Vous pouvez le faire en une seule opération. join fonctionne sur l'index, que vous ne semblez pas avoir défini. Il suffit de définir l'index sur ID, puis de joindre df après avoir également défini son index sur ID, puis de réinitialiser votre index pour renvoyer votre base de données d'origine avec la nouvelle colonne ajoutée.

>>> df.set_index('ID').join(df1.set_index('ID')).reset_index() 
    ID Value ID_n 
0 a  45  3 
1 b  3 35 
2 c  10  0  

Aussi, parce que vous ne faites pas un inplace set_index sur df1, sa structure reste la même (à savoir que vous ne changez pas son indexation).