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

如何用Pandas生成包含F和G列的邻接矩阵式实验结果表

邻接矩阵生成方案(支持F、G列双向取均值)

需求说明

  • 从Input.csv读取实验数据,生成以Experimenter与Subject为双向节点的邻接矩阵
  • 对**同一节点对(A→B和B→A)**的F、G列分别取平均值
  • 矩阵主对角线(节点自身)固定为1.00
  • 最终结果导出至Output.csv

修改后的完整代码

import numpy as np
import pandas as pd

# 从文件读取输入数据
df = pd.read_csv('Input.csv')

# 获取所有唯一节点(合并Experimenter和Subject的所有值)
all_nodes = pd.unique(df[['Experimenter', 'Subject']].values.ravel('K'))
all_nodes.sort()

# 初始化邻接矩阵,填充0.0
adj_matrix = pd.DataFrame(0.0, index=all_nodes, columns=all_nodes)

# 设置主对角线为1.00
np.fill_diagonal(adj_matrix.values, 1.00)

# 遍历所有节点对,计算双向均值
for node1 in all_nodes:
    for node2 in all_nodes:
        if node1 == node2:
            continue
        # 收集A→B的F值和B→A的G值
        f_values = df[(df['Experimenter'] == node1) & (df['Subject'] == node2)]['F'].values
        g_values = df[(df['Experimenter'] == node2) & (df['Subject'] == node1)]['G'].values
        # 合并后取平均值(有数据则赋值,无数据保持0.0)
        combined_values = np.concatenate([f_values, g_values])
        if len(combined_values) > 0:
            adj_matrix.loc[node1, node2] = np.mean(combined_values)

# 格式化结果保留两位小数
adj_matrix = adj_matrix.round(2)

# 导出至指定文件
adj_matrix.to_csv('Output.csv')

# 打印结果
print(adj_matrix)

关键改动说明

  1. 节点全集处理:合并Experimenter和Subject的所有唯一值,确保矩阵覆盖所有涉及的实验角色
  2. 双向均值逻辑:针对节点对(A,B),同时收集A作为Experimenter、B作为Subject的F值,以及B作为Experimenter、A作为Subject的G值,合并后取平均值,匹配需求中的双向角色均值要求
  3. 对角线设置:用np.fill_diagonal直接将主对角线设为1.00
  4. 文件IO支持:添加pd.read_csv读取输入文件,to_csv导出最终结果到指定路径
  5. 结果格式化:用round(2)确保输出保留两位小数,与预期格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:45:32