2017-07-08 184 views
1

我有下面熊貓數據幀集結在熊貓數據幀

enter image description here

現在我要總結的計數[用戶1] [用戶2]和[用戶2] [用戶1]。例如,[用戶1 = 1] [用戶2 = 92]的計數值是count = 1,[user 1 = 92] [user 2 = 1]是count = 2,所以我希望最終輸出爲用戶1 = 1,用戶2 = 92和計數= 3。另外,對於每個[用戶1] [用戶2],可能沒有[用戶2] [用戶1]。例如,[用戶1 = 29] [用戶2 = 56]計數值爲3,但沒有[用戶1 = 56] [用戶2 = 29],所以最終輸出將是用戶1 = 29,用戶2 = 56和計數= 3

所以最終的輸出應該是這樣的

enter image description here

是否有人可以指導我如何做到這一點?

+1

請後的實際數據,而不是圖片。 –

回答

1

一個解決方案分組排序的元組:

df['users'] = list(zip(df.user1,df.user2)) 
df['users'] = df.users.apply(lambda t:tuple(sorted(t))) 
counts = df.groupby('users', as_index=False)['count'].sum() 
counts[['user1','user2']] = counts.users.apply(pd.Series) 
counts = counts[['user1','user2','count']] # Select and reorder columns 
+0

謝謝,它效果很好。你能解釋一下代碼嗎? – aries

+1

當然。首先,我們構建一個包含唯一(排序)的用戶對的列'users'。需要一個元組(而不是一個列表),因爲我們需要可哈希值來使用'groupby'。然後,我們對我們的元組進行分組並對「count」列進行求和。 'as_index = False'在這裏很有用,可以將元組保存在一個單獨的列中並在稍後處理。最後我們再應用'pd.Series'將元組分割成2個獨立的列。 –