如何使用pandas计算DataFrame两两列的共现频次
实现方案
你现有DataFrame里的1、0都是字符串格式,需要先转换成数值类型再做运算,最简洁高效的实现方式如下:
# 将df中字符串格式的0/1转换为整数 df = df.astype(int) # 直接通过矩阵乘法计算共现频次,结果自动对齐行列名 co_occurrence = df.T @ df
原理解释
将数据转为整数类型后,转置后的DataFrame和原DataFrame做矩阵乘法,本质是对每一组列对做对应位置相乘再求和,刚好就是两列同时为1的样本总数,完全匹配你的需求。示例数据运行后,co_occurrence.loc['M1','M2']的结果为2,和你预期的一致。
针对你160样本、100种矿物的数据集,该方法是向量化运算,运行效率远高于手动写双层循环逐对统计。
内容的提问来源于stack exchange,提问作者geolguy
相关产品推荐
相关产品推荐

