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

如何用Pandas生成百分比变化矩阵并获取最值变化产品?

Pandas实现产品成本百分比变化矩阵及极值组合获取

1. 生成百分比变化矩阵

首先将DataFrame的product列设为索引,便于后续计算操作:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'product': ['product a', 'product b', 'product c'],
    'cost': [56, 59, 104]
}).set_index('product')

核心计算逻辑是:对行产品X和列产品Y,百分比变化公式为(Y成本 - X成本)/X成本 * 100,完成计算后格式化数值为带两位小数的百分比格式,同时将对角线(自身对比)设为空字符串:

# 提取成本数组
costs = df['cost'].values
# 计算两两产品间的百分比变化矩阵
pct_change_matrix = (costs[:, None] - costs) / costs * 100
# 转换为DataFrame并设置行列索引
pct_change_df = pd.DataFrame(
    pct_change_matrix,
    index=df.index,
    columns=df.index
)
# 格式化数值为百分比格式,对角线置空
pct_change_df = pct_change_df.applymap(lambda x: f'{x:.2f}%' if x != 0 else '')

运行后pct_change_df即为目标格式的百分比变化矩阵。

2. 获取百分比变化最高/最低的产品组合

先将矩阵转为长格式,排除自身对比的无效行,并将百分比字符串转为数值类型用于排序:

# 转换为长格式
long_df = pct_change_df.stack().reset_index()
long_df.columns = ['基准产品', '对比产品', '百分比变化']
# 过滤自身对比行,转换百分比为数值
long_df = long_df[long_df['基准产品'] != long_df['对比产品']]
long_df['数值'] = long_df['百分比变化'].str.rstrip('%').astype(float)

接着筛选极值对应的产品组合:

# 获取百分比变化最高的组合
max_row = long_df.loc[long_df['数值'].idxmax()]
max_combination = f"{max_row['基准产品']} 与 {max_row['对比产品']}"
max_pct = max_row['百分比变化']

# 获取百分比变化最低的组合
min_row = long_df.loc[long_df['数值'].idxmin()]
min_combination = f"{min_row['基准产品']} 与 {min_row['对比产品']}"
min_pct = min_row['百分比变化']

示例中最高组合为product a 与 product c(85.71%),最低组合为product c 与 product a(-46.15%),与预期结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:18:43