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