2017-07-08 72 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个独立的列。 –