有没有简单方法将pandas Series转换为展示数值比率的交叉表?
实现方案
核心思路
利用numpy的广播特性做向量运算,无需循环,几行代码就能实现需求。
完整代码示例
import pandas as pd # 1. 构造输入数据,实际使用时直接读取你的数据源即可 df = pd.DataFrame({ 'name': ['bob', 'fred', 'jim', 'anne'], 'score': [2, 4, 1, 5] }) # 2. 核心计算逻辑 s = df.set_index('name')['score'] result = pd.DataFrame( s.values.reshape(-1, 1) / s.values, index=s.index, columns=s.index ).reset_index() # 可选:保留1位小数,和示例输出格式完全匹配 result = result.round(1)
逻辑说明
- 先将
name设为索引,提取出score对应的Series对象 - 通过
reshape(-1, 1)把一维的分数序列转为「n行1列」的二维数组,和原一维分数序列做除法时会自动广播为n×n的矩阵,每个元素的值正好是行对应用户的score ÷ 列对应用户的score,完全匹配你的计算规则 - 给矩阵设置行、列名为用户名,重置索引后即可得到要求的输出格式
内容的提问来源于stack exchange,提问作者cgoldie
相关产品推荐
相关产品推荐

