2017-10-19 16 views
1

Je suis novice en Python et j'apprécierais beaucoup votre aide! J'ai une base de données avec trois colonnes et je voudrais combiner les lignes où les deux premières colonnes ont les mêmes associations (à savoir être dans la colonne A par rapport à la colonne B n'a pas vraiment d'importance dans cette situation) et additionner leurs valeurs dans la troisième colonne. Par exemple, en commençant par ce dataframe:Données Python combinant des lignes où les deux premières valeurs de colonne sont inversées

A B C 

x y 5 

z z 6 

y x 4 

z y 3 

y z 2 

Je voudrais être en mesure de produire une trame de données comme celui-ci (en combinant x y avec y x et z y avec y z):

A B C 

x y 9 

z z 6 

y z 5 

Toutes les suggestions sur la façon pour faire ça?

Voici mon code à ce jour:

df = pd.DataFrame.from_dict({k:dict(v) for k,v in dic.items()}).fillna(0) 
MG_df = df.stack().reset_index().rename(columns 
{'level_0':'Source','level_1':'Target', 0:'Weight'}) 
pd.DataFrame(np.sort(MG_df[['Source','Target']].values, axis=1)) 
MG_df.groupby(['Source','Target']).Weight.sum().reset_index() 
MG_df = MG_df[MG_df.Weight != 0] 

Répondre

2

Vous pouvez trier les colonnes A et B et ensuite utiliser groupby

df[['A','B']] = pd.DataFrame(np.sort(df[['A','B']].values, axis=1)) 
df.groupby(['A', 'B']).C.sum().reset_index() 


    A B C 
0 x y 9 
1 y z 5 
2 z z 6 
+0

'np.sort (df [[ 'A', 'B'] ] .values' - très bonne idée! – MaxU

+1

@MaxU, merci :) – Vaishali

+0

Merci beaucoup! Je semble toujours obtenir les valeurs redondantes (c'est-à-dire x y et y x sont toutes deux listées avec des valeurs individuelles pour la 3ème colonne). Mon code est ci-dessous. Qu'est-ce que je fais mal? – shay