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

Python实现DataFrame中替代项的成对行差值矩阵生成

需求:生成替代项成对比较的偏差矩阵

给定一个包含1660行(替代项标记为A1-A1660)和8列(准则标记为C1-C8)的DataFrame,需要生成一个新矩阵:

  • 索引为替代项配对名称(如A1-A2)
  • 各列对应准则下两个替代项的差值(前者减后者)

示例输入DataFrame:

C1     C2     C3
A1  1996    36     0.18
A2  1373    15     0.53
A3  1472    19     0.29

期望输出示例:

C1   C2    C3
A1-A2   623   21  -0.35
A1-A3   524   17  -0.11
A2-A1  -623  -21   0.35
A2-A3   -99   -4   0.24
A3-A1  -524  -17   0.11
A3-A2    99    4  -0.24

实现方案

使用Python的pandas库可以高效完成需求,步骤如下:

  1. 生成所有替代项的有序配对(包含反向配对,如A1-A2和A2-A1)
  2. 对每一对计算各准则列的差值
  3. 将结果整理为目标格式的DataFrame

代码实现

import pandas as pd

# 替换为你的实际DataFrame
df = pd.read_csv("your_data.csv", index_col=0)  # 假设索引列是替代项名称A1/A2...

# 生成所有非重复的有序配对
indices = df.index.tolist()
pairs = [(x, y) for x in indices for y in indices if x != y]

# 计算差值并构建结果矩阵
result_rows = []
pair_labels = []
for x, y in pairs:
    pair_labels.append(f"{x}-{y}")
    # 计算x行减y行的差值
    diff_values = df.loc[x] - df.loc[y]
    result_rows.append(diff_values.values)

result_df = pd.DataFrame(result_rows, index=pair_labels, columns=df.columns)

# 可选:保存结果到文件
result_df.to_csv("pairwise_diff_matrix.csv")

针对大样本的优化

1660行数据会生成约275万条配对记录,若不需要反向配对(仅保留A1-A2而非A2-A1),可修改配对生成逻辑减少内存占用:

# 仅生成单向配对(如A1-A2,跳过A2-A1)
pairs = [(x, y) for idx, x in enumerate(indices) for y in indices[idx+1:]]

这样配对数会减少到约137万,节省一半内存。

内容的提问来源于stack exchange,提问作者Kostas Pl.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:13:27