如何用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)
关键改动说明
- 节点全集处理:合并
Experimenter和Subject的所有唯一值,确保矩阵覆盖所有涉及的实验角色 - 双向均值逻辑:针对节点对
(A,B),同时收集A作为Experimenter、B作为Subject的F值,以及B作为Experimenter、A作为Subject的G值,合并后取平均值,匹配需求中的双向角色均值要求 - 对角线设置:用
np.fill_diagonal直接将主对角线设为1.00 - 文件IO支持:添加
pd.read_csv读取输入文件,to_csv导出最终结果到指定路径 - 结果格式化:用
round(2)确保输出保留两位小数,与预期格式一致
内容的提问来源于stack exchange,提问作者matekus
相关产品推荐
相关产品推荐

