0
votes

Comment puis-je consolider plusieurs lignes en une seule ligne en fonction de leurs valeurs dans un Dataframe Pandas?

J'ai un fichier de données appelé trafic: xxx

J'aimerais finir avec un fichier de données comme: xxx

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.

colonnes à base de terre / air serait des chaînes suivant le format de "Destination: Poids total".

Ce modèle continuerait à réduire toutes les autres sources telles que "WA" ...


0 commentaires

3 Réponses :


2
votes

Un moyen, pas si "concis" cependant.

groupby à somme poids. Créez une colonne que dicts destination et poids total par groupe. Un autre groupby pour mettre les dicts dans la liste. Puis pivot . xxx

donne: xxx


0 commentaires

1
votes

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()


0 commentaires

1
votes

initialiser xxx

true xxx

sortie xxx


0 commentaires