首页 > 解决方案 > Pandas:按两列组合分组

问题描述

我有如下数据。score 列是 x vs y 的得分(相当于 y vs x)。

from collections import Counter
import pandas as pd

d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)], 
                 columns=['x', 'y', 'score'])

    x   y   score
0   a   b   1
1   a   c   2
2   b   a   3
3   b   a   3

我想评估每个组合的得分计数,因此 ('a' vs 'b) 和 ('b' vs 'a') 应该组合在一起,即

        score
x   y   
a   b   {1: 1, 3: 2}
    c   {2: 1}

但是,如果我这样做d.groupby(['x', 'y']).agg(Counter), ('a', 'b') 和 ('b', 'a') 不会组合在一起。有没有办法解决这个问题?谢谢!

        score
x   y   
a   b   {1: 1}
    c   {2: 1}
b   a   {3: 2}

标签: pythonpandas

解决方案


IIUC

d[['x','y']]=np.sort(d[['x','y']],1)
pd.crosstab([d.x,d.y],d.score)
Out[94]: 
score  1  2  3
x y           
a b    1  0  2
  c    0  1  0

推荐阅读