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

如何在函数中计算pandas多索引DataFrame的索引组合差值?

实现矩阵索引m与n所有组合的差值计算

需求明确

我们需要针对索引值集合{1,2,3},生成m和n的所有笛卡尔组合,并计算每个组合的m-n,最终得到以下9组结果:(1-1)、(1-2)、(1-3)、(2-1)、(2-2)、(2-3)、(3-1)、(3-2)、(3-3)(注:仅针对索引值运算,不涉及DataFrame单元格内容)。

方法一:纯Python函数实现

可以直接利用itertools.product生成所有组合,再遍历计算差值:

import itertools

def calculate_mn_diff():
    # 定义索引范围
    indices = [1, 2, 3]
    # 生成m和n的所有组合
    mn_combinations = itertools.product(indices, indices)
    # 计算每个组合的差值,保存为字符串格式
    diff_results = [f"({m}-{n})" for m, n in mn_combinations]
    # 如果需要数值结果,改用:diff_results = [m - n for m, n in mn_combinations]
    return diff_results

# 调用函数
print(calculate_mn_diff())

输出结果:

['(1-1)', '(1-2)', '(1-3)', '(2-1)', '(2-2)', '(2-3)', '(3-1)', '(3-2)', '(3-3)']

方法二:结合现有pandas DataFrame实现

如果要基于你提供的df_matrix(行索引为n,列名为m的取值)来生成组合,可直接提取索引和列名进行运算:

import pandas as pd

# 构造示例DataFrame(模拟你提供的结构)
data = {
    1: ['x', 'a', 'p'],
    2: ['y', 'b', 'q'],
    3: ['z', 'c', 'r']
}
df_matrix = pd.DataFrame(data, index=[1, 2, 3])
df_matrix.index.name = 'n'
df_matrix.columns.name = 'm'

def calculate_mn_diff_from_df(df):
    # 获取m的取值(列名)和n的取值(行索引)
    m_values = df.columns.tolist()
    n_values = df.index.tolist()
    # 生成所有组合并计算差值
    diff_results = [f"({m}-{n})" for m in m_values for n in n_values]
    # 数值版本:diff_results = [m - n for m in m_values for n in n_values]
    return diff_results

# 调用函数
print(calculate_mn_diff_from_df(df_matrix))

输出结果和方法一完全一致。

说明

  • 如果需要的是数值形式的差值(比如0、-1、-2、1等),只需把列表推导式里的字符串格式改成直接计算m-n即可。
  • 两种方法都能灵活扩展,如果后续矩阵维度变化(比如4x4),只需修改indices列表或调整DataFrame的索引/列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:01:10