簡體   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