You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Pandas数据透视表生成列共现计数矩阵?

回答

最优方案:矩阵乘法(无需透视表)

这个需求本质是计算二进制特征矩阵的协现矩阵,直接用矩阵乘法是最高效的实现方式,代码简洁且性能远超嵌套循环:

# 提取特征列(排除"I"列)
features = df.drop("I", axis=1)
# 矩阵乘法:特征矩阵转置 × 原特征矩阵,直接得到两两列的同时为1的行数
cooccurrence = features.T.dot(features)

运行后得到的cooccurrence与目标result完全一致,数据量越大,该方法的效率优势越明显。

用透视表实现的思路(不推荐,效率偏低)

如果一定要用透视表,需要先将数据转换为长格式,再通过透视统计两两组合的次数,步骤繁琐且效率远低于矩阵乘法:

# 转换为长格式:仅保留值为1的列记录
long_df = df.melt(id_vars="I", var_name="col", value_name="val")
long_df = long_df[long_df["val"] == 1].drop("val", axis=1)

# 合并自身,得到每行中所有为1的列的两两组合
merged = pd.merge(long_df, long_df, on="I", suffixes=("_x", "_y"))

# 透视统计组合出现的次数,填充空值为0
pivot_result = merged.pivot_table(index="col_x", columns="col_y", values="I", aggfunc="count", fill_value=0)

这种方法仅适合理解透视表的应用场景,实际生产中不建议使用。


内容的提问来源于stack exchange,提问作者mans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:25:43