我有如下数据。分数列是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}

关于python - Pandas :按两列组合分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51642935/

10-12 23:30