如何使用pandas将配对值DataFrame转换为(0,1)矩阵
实现代码
直接使用pandas内置的交叉表统计+索引补全即可完成,无需手动写循环,代码如下:
import numpy as np import pandas as pd # 你给定的原始数据 A = pd.Series(np.array([24, 25, 26, 27, 28, 29])) B = pd.Series(np.array([105, 106, 107, 108, 109])) AB_dataframe = pd.DataFrame({ 'A': [25, 25, 25, 26, 26, 27, 27, 28, 29], 'B': [106, 108, 109, 108, 109, 106, 108, 108, 107] }) # 核心转换逻辑 # 1. 统计A、B配对的出现频次,超过1次的统一截断为1 cross_tab = pd.crosstab(AB_dataframe['A'], AB_dataframe['B']).clip(upper=1) # 2. 按完整的A、B取值补全行、列,缺失的配对填充为0 result = cross_tab.reindex(index=A, columns=B, fill_value=0) print(result)
输出结果
运行后输出和预期完全一致:
105 106 107 108 109 24 0 0 0 0 0 25 0 1 0 1 1 26 0 0 0 1 1 27 0 1 0 1 0 28 0 0 0 1 0 29 0 0 1 0 0
逻辑说明
pd.crosstab用于统计两个字段组合的出现频次,天然满足配对存在性统计的基础需求clip(upper=1)用来处理可能存在的重复配对,无论出现多少次统一标记为1reindex用来对齐给定的完整A、B取值,把原本不在统计范围内的24、105等维度补全,缺失值填0即可
内容的提问来源于stack exchange,提问作者user496181
相关产品推荐
相关产品推荐

