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