python - 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}
解决方案
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
推荐阅读
- database - 数据库未在 sqflite 中初始化 - 颤振
- sql - 提取两个字符之间的数字
- javascript - 使用 jquery 在 n 秒后阻止“显示然后隐藏”
- java - Java Thread 在 Windows 上工作,但在 Mac 上运行缓慢且出现故障
- flutter - Flutter Web:使用 Flutter Web 录制网络摄像头
- excel - Excel中VBA中的电源查询日期格式
- sql - 插入失败。3800:THEN/ELSE 表达式中的数据类型不匹配
- swift - GeometryReader 似乎改变了使用其大小数据的视图布局。我怎样才能避免这种情况?
- aws-lambda - AWS API Gateway 映射模板返回空响应或缺少引号
- python - 使用 Python 对 Twitter 进行情绪分析(将查询与其他推文分开)