我有以下数据框。
>> 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' and y = 'B') 与 (x = 'B' and y = 'A') 相加。这应适用于所有组合。
所以输出应该是这样的
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:
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 函数加入它们
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']
一旦我们有了这个列表,我们就创建了一系列名称为 comb
的列表,以便我们可以将其用作 df.groupby
中的辅助列
关于python - 总结 Python Pandas 中两列(双向)的组合计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65976818/