J'ai un fichier de données appelé trafic: J'aimerais finir avec un fichier de données comme: p> où Les 4 lignes sont combinées en 1 basée sur la source. Les méthodes de trafic sont ensuite divisées par leurs destinations dans l'ordre croissant. S'il y a plusieurs entrées de Dites la-> NY de type Terceau, ajoutez les poids. P> colonnes à base de terre / air serait des chaînes suivant le format de "Destination: Poids total". P> Ce modèle continuerait à réduire toutes les autres sources telles que "WA" ... P> P>
3 Réponses :
Un moyen, pas si "concis" cependant.
donne: p> groupby code> à somme poids. Créez une colonne que dicts code> destination et poids total par groupe. Un autre groupby code> pour mettre les dicts dans la liste. Puis pivot code>. P>
Ce code devrait vous donner ce que vous recherchez.
ndf = df.groupby(['Source','Method','Destination']).sum()
ndf = ndf.reset_index()
ndf['Weight'] = ndf['Weight'].astype(str)
ndf = ndf.groupby(['Source','Method']).agg({'Source':lambda x: x.max(),'Destination':
lambda x: ','.join(x),'Weight':lambda x: ','.join(x)})
fdf = ndf[['Destination','Weight']].apply(lambda x: x.str.split(',').explode())
fdf.reset_index(inplace=True)
fdf['Combined'] = fdf['Destination'] + ':' + fdf['Weight']
fdf = fdf[['Source','Method','Combined']]
fdf = pd.pivot_table(fdf,index='Source',columns = 'Method',aggfunc = lambda x: ',
'.join(x)).reset_index()
initialiser true p> sortie p>