Bonjour, j'essaie de fusionner deux ensembles de données via :
df1=pd.dataframe({'company name':['a','b','c'], 'analyst 1 name':['tom','mike',np.nan], 'analyst 2 name':[np.nan,'alice',np.nan], 'analyst 3 name':['jane','steve','alex']}) df2=pd.dataframe({'company name':['a','b','c'], 'score 1':[3,5,np.nan], 'score 2':[np.nan,1,np.nan], 'score 3':[6,np.nan,11]}) df_desire=pd.dataframe({'company name':['a','a','b','b','b','c'], 'analyst':['tom','jane','mike','alice','steve','alex'], 'score':[3,6,5,1,np.nan,11]})
Fondamentalement, df1 contient le nom de l'analyste et df2 contient le score attribué par l'analyste. J'essaie de fusionner les deux dans df_desire. La méthode de lecture des deux tableaux est la suivante : pour la société a, elle est couverte par deux personnes, à savoir Tom et Jane, qui attribuent respectivement 3 et 6. Notez que bien que Steve couvre la société b, je spécifie intentionnellement le score comme na à des fins de robustesse.
Ce que j'ai fait c'est :
pd.concat([df1.melt(id_vars='company name',value_vars=['analyst 1 name','analyst 2 name','analyst 3 name']),\ df2.melt(id_vars='company name',value_vars=['score 1','score 2','score 3'])],axis=1)
Je recherche une solution plus élégante.
Essayez :
x = ( df1.set_index("company name") .stack(dropna=false) .reset_index(name="name") .drop(columns="company name") ) y = df2.set_index("company name").stack(dropna=false).reset_index(name="score") print( pd.concat([x, y], axis=1)[["company name", "name", "score"]] .dropna(subset=["name", "score"], how="all") .reset_index(drop=true) )
Impression :
company name name score 0 A Tom 3.0 1 A Jane 6.0 2 B Mike 5.0 3 B Alice 1.0 4 B Steve NaN 5 C Alex 11.0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!