熊猫:按两列组合分组

wkf

我有如下数据。分数列是x对y的分数(相当于y对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}
学生

如果您不关心顺序,则可以sort在两个列上使用,然后应用groupby

import pandas as pd
from collections import Counter

d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)], 
                 columns=['x', 'y', 'score'])
# Note: you can copy to other dataframe if you do not want to change original
d[['x', 'y']] = d[['x', 'y']].apply(sorted, axis=1) 
x = d.groupby(['x', 'y']).agg(Counter)
print(x)
# Result:
#             score
# x y              
# a b  {1: 1, 3: 2}
#   c        {2: 1}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章