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

标签 python pandas dataframe pivot

我有以下数据框。

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

相关文章:

python - 如何将包含 '_' 的 JSON 字段拆分为子对象?

python - 使用 pandas Between_time() 函数并以列表作为输入参数

Python合并两个数据框(模糊匹配,有些列完全匹配,而有些列不匹配)

python - 如何在pandas python中转换列中的行并执行操作

dataframe - 添加一个列来计算累积的先前重复值

python - 使用 Python 和 SetWindowsHookExA 应用低级键盘 Hook

python - 当调用像 Activation ('relu' )(X) 这样的类时,它实际上是如何工作的?

python - Pandas:解释表格摘要中的条目差异和特定列值

python - pandas dataframe如何进行 "elementwise"串联?

python - 来自 Youtube API 的最受欢迎的 YouTube 视频