如何将Pandas Series转换为统计相同值对应关系的矩阵
解决方法
你要的是基于原Series值的相等性构建布尔矩阵,直接用NumPy广播就能快速实现,步骤如下:
- 先构造示例中的Series:
import pandas as pd # 原Series s = pd.Series([1,2,3,1,2], index=[1,2,3,4,5], name='Col Values')
- 生成目标矩阵:
# 提取Series的值数组 vals = s.values # 广播比较每个值与所有值是否相等,转成整数0/1 equal_matrix = (vals[:, None] == vals).astype(int) # 转换成DataFrame,设置行列索引与原Series一致 result_df = pd.DataFrame(equal_matrix, index=s.index, columns=s.index)
运行后result_df就是你要的矩阵:
| Index | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 1 | 0 |
| 2 | 0 | 1 | 0 | 0 | 1 |
| 3 | 0 | 0 | 1 | 0 | 0 |
| 4 | 1 | 0 | 0 | 1 | 0 |
| 5 | 0 | 1 | 0 | 0 | 1 |
为什么透视表/相关函数不行?
- 透视表是做数据聚合统计的,没法直接实现这种逐元素的相等性比较;
- 相关函数计算的是变量间的线性相关性,和你要的"值相等则标1"逻辑完全不匹配。
内容的提问来源于stack exchange,提问作者user8143996
相关产品推荐
相关产品推荐

