复现Pandas DataFrame行两两比较方案时遇NumPy报错求助
解决Pandas DataFrame行两两比较的NumPy错误
错误原因
np.outer的底层逻辑是执行乘法运算,而字符串无法与字符串相乘,直接用它处理字符串列会触发TypeError。- 你尝试用空的
result["name"]调用np.equal.outer时,Pandas空Series与NumPy的ufunc交互会抛出NotImplementedError,因为空值列无法完成元素级的相等判断。
正确实现方案
方案一:用np.equal.outer直接处理原数据列
不需要预先创建空的多级索引DataFrame,直接基于原DataFrame的列生成两两比较结果,再组装成目标结构:
import pandas as pd import numpy as np # 创建测试数据 d = {'name': ["john", "john", "mary", "mary"], 'id': ["1a", "1a", "2b", "3c"]} df = pd.DataFrame(data=d) # 生成多级索引并填充两两比较结果 result = pd.DataFrame( {col: np.equal.outer(df[col], df[col]).ravel() for col in df.columns}, index=pd.MultiIndex.from_product([df.index, df.index]) )
方案二:Pandas广播风格实现
利用数组广播完成元素级的两两相等判断,更贴合Pandas的使用习惯:
import pandas as pd # 创建测试数据 d = {'name': ["john", "john", "mary", "mary"], 'id': ["1a", "1a", "2b", "3c"]} df = pd.DataFrame(data=d) # 通过广播生成N*N的相等矩阵,再转为多级索引结构 result = pd.DataFrame( {col: df[col].values[:, None] == df[col].values[None, :] for col in df.columns}, index=pd.MultiIndex.from_product([df.index, df.index]) )
验证结果
执行print(result.loc[0])会输出符合预期的结果:
name id 0 True True 1 True True 2 False False 3 False False
内容的提问来源于stack exchange,提问作者Tytire Recubans
相关产品推荐
相关产品推荐

