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

如何使用pandas从DataFrame生成类相关矩阵格式的变量计数表

可以直接用pandas实现这个转换,不需要额外依赖其他库,核心逻辑是先搭建全0的矩阵框架,再把对应count值填充到匹配的行列位置即可。

实现逻辑

  • 拆分原始数据variable列的所有取值,提取全部独立变量,按照目标格式要求指定行、列的排列顺序
  • 用指定的行、列索引初始化一个数值全为0的整型DataFrame方阵
  • 遍历原始数据集每一行,拆分variable字段做对应赋值:
    • 字段为单个变量时,把count值填到该变量对应行列的对角线位置
    • 字段为逗号分隔的两个变量时,把count值填到两个变量互为行、列的交叉位置

可直接运行的代码

import pandas as pd
import numpy as np

# 原始输入数据集
df = pd.DataFrame({
    'variable': ['a,x', 'a', 'a,y'],
    'count': [20, 100, 40]
})

# 对齐示例输出的行列顺序
row_order = ['a', 'x', 'y']
col_order = ['y', 'x', 'a']

# 初始化全0矩阵
result = pd.DataFrame(
    np.zeros((len(row_order), len(col_order)), dtype=int),
    index=row_order,
    columns=col_order
)

# 遍历填充计数值
for _, row in df.iterrows():
    var_split = row['variable'].split(',')
    cnt = row['count']
    if len(var_split) == 1:
        # 单变量填充对角线位置
        v = var_split[0]
        result.loc[v, v] = cnt
    else:
        # 双变量填充两个交叉位置
        v1, v2 = var_split
        result.loc[v1, v2] = cnt
        result.loc[v2, v1] = cnt

print(result)

输出结果

运行后得到的矩阵数值和要求完全匹配,pandas默认把列名打印在顶部,如果需要和示例一样把列名放在底部,调整打印格式即可:

y   x    a
a  40  20  100
x   0   0   20
y   0   0   40

后续如果新增变量、新增变量组合,这套逻辑不需要修改即可自动适配,没有对应关系的变量交叉位置会默认保持0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:24:31