2017-10-19 4 views
1

私はPythonを初めて使いました。私は3つの列を持つデータフレームを持ち、最初の2つの列が同じ関連付けを持つ行を結合したいと考えています(つまり、この状況では列Aと列Bは実際には関係ありません)。例えば、このデータフレームで始まる:最初の2つの列の値が逆の場合に行を結合するPythonデータフレーム

A B C 

x y 5 

z z 6 

y x 4 

z y 3 

y z 2 

Iは、(y xx yを組み合わせるとy zz y)このようなデータフレームを生成できるようにしたい:方法

A B C 

x y 9 

z z 6 

y z 5 

任意の提案をこれをする?

ここに私のコードは、これまでのところです:

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] 

答えて

2

あなたは、列AとBをソートして、[[ 'A'、 'B'] dfを(

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をGROUPBY使用することができます] .values' - 非常に良いアイデア! – MaxU

+1

@マックス、ありがとうございました:) – Vaishali

+0

ありがとうございました!私はまだ冗長な値を得ているようです(つまり、x yとy xは両方とも3列目の個別の値でリストされています)。私のコードは以下の通りです。私は間違って何をしていますか? – shay

関連する問題