gpt4 book ai didi

python - 总结 Python Pandas 中两列(双向)的组合计数

转载 作者:行者123 更新时间:2023-12-04 00:51:37 26 4
gpt4 key购买 nike

我有以下数据框。

>> 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,BB,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com