我有如下数据。分数列是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] 删除。
我来说两句