[英]Sum the count of combination of two columns (in both directions) in Python Pandas
我有以下 dataframe。
>> df = pd.DataFrame.from_dict({'x':['A','C','E','B','F','D','A','D','C','B','D','C','E'],
'y': ['B','D','F','A','D','F','C','F','E','D','B','A','C'],
'count':[3,4,21,4,1,4,5,22,6,7,10,12,13]})
x y count
0 A B 3
1 C D 4
2 E F 21
3 B A 4
4 F D 1
5 D F 4
6 A C 5
7 D F 22
8 C E 6
9 B D 7
10 D B 10
11 C A 12
12 E C 13
我需要找到计数的总和,例如,如果 (x = 'A' 和 y = 'B') 与 (x = 'B' 和 y = 'A') 相加。 这应适用于所有组合。
所以 output 应该是这样的
comb sum
0 A-B 7
1 A-C 17
2 B-D 17
3 C-D 4
4 C-E 6
5 D-F 27
6 E-C 13
7 E-F 21
您可以使用np.sort
对列进行排序,然后将列和 groupby 与 sum 连接起来:
s = pd.Series(map('-'.join , np.sort(df[['x','y']],axis=1)),name='comb')
out = df.groupby(s)['count'].sum().reset_index(name='Sum_of_Numbers')
print(out)
comb Sum_of_Numbers
0 A-B 7
1 A-C 17
2 B-D 17
3 C-D 4
4 C-E 19
5 D-F 27
6 E-F 21
解释:
首先,我们在axis = 1上对列x和y进行排序,因此我们将组A,B
和B,A
作为A,B
,然后我们使用-.join
和 map function 将它们连接起来
print([*map('-'.join , np.sort(df[['x','y']],axis=1))])
#['A-B', 'C-D', 'E-F', 'A-B', 'D-F', 'D-F', 'A-C',
#'D-F', 'C-E', 'B-D', 'B-D', 'A-C', 'C-E']
一旦我们有了这个列表,我们就创建了一系列 name = comb
的列表,以便我们可以将其用作df.groupby
中的帮助列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.