繁体   English   中英

将 Python Pandas 中两列(双向)的组合计数相加

[英]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,BB,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM