如何有效地将所有非对角线元素乘以 pandas DataFrame 中的常量?

问题描述 投票:0回答:1

我有一个存储为 pandas DataFrame 的平方成本矩阵。行和列表示位置 [i, j],我想将所有非对角线元素(其中 i != j)乘以常数 c,出于性能原因,不使用任何 for 循环。

是否有一种有效的方法可以在 pandas 中实现此目的,或者我是否必须切换到 numpy,然后再回到 pandas 来执行此任务?

示例

import pandas as pd

# Sample DataFrame
cost_matrix = pd.DataFrame([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# Constant
c = 4

# Desired output
#    1  8  12
#    16 5  24
#    28 16  9
pandas numpy matrix
1个回答
0
投票

您可以为所有对角线元素创建一个遮罩

(i!=j)
,应用遮罩,然后乘以非对角线元素:

import pandas as pd

cost_matrix = pd.DataFrame([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

c = 4

# Create a mask where i != j and convert mask to a DataFrame with the same index and columns
mask = cost_matrix.index.values[:, None] != cost_matrix.columns.values
mask_df = pd.DataFrame(mask, index=cost_matrix.index, columns=cost_matrix.columns)

cost_matrix[mask_df] *= c

print(cost_matrix)

这将输出

 1   8  12
16   5  24
28  32   9

注意:我认为您在所需的输出中犯了拼写错误。底部中间应该是 32 而不是 16

© www.soinside.com 2019 - 2024. All rights reserved.