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

如何修改Python代码实现两个CSV基于3个参数的最近值匹配

3参数欧氏距离匹配修改方案

核心改动说明

  • 匹配维度从2维扩展为3维,套餐侧新增common_Price字段,用户侧新增ARPU_AVERAGE字段,两者列顺序严格对应保证距离计算准确
  • 修复原代码中欧氏距离计算行缺失右括号的语法错误
  • 输出结果新增匹配套餐的价格字段,方便核对

完整可运行代码

import pandas as pd
import numpy as np

# 读取套餐数据库,生成[价格、网外通话、流量]三列匹配数组
common_list = pd.read_csv("common_list.csv")
array_price = np.array(common_list["common_Price"])
array_offnet = np.array(common_list["common_Offnet"])
array_traffic = np.array(common_list["common_Traffic"])
array = np.column_stack((array_price, array_offnet, array_traffic))

# 读取用户数据,按相同顺序提取匹配维度
csv_data = pd.read_csv("By_ARPU.csv")
data = csv_data[['ARPU_AVERAGE', 'Offnet Calls', 'Traffic (MB)']].to_numpy()

# 批量计算最近邻匹配
sol = []
for target in data:
    dist = np.sqrt(np.sum(np.square(array[:, np.newaxis] - target), axis=2))
    idx = np.argmin(dist)
    sol.append(idx)

# 写入匹配结果并输出
csv_data["Suggested Plan [SP]"] = common_list['common_name'][sol].values
csv_data["SP: Price"] = common_list['common_Price'][sol].values
csv_data["SP: Offnet Minutes"] = common_list['common_Offnet'][sol].values
csv_data["SP: Traffic"] = common_list['common_Traffic'][sol].values

csv_data.to_csv('4.7 final.csv', index=False, header=True)

可选优化建议

如果三个维度数值量级差异较大(例如价格为几十元量级,流量为数千MB量级),可增加标准化逻辑,避免量级高的维度主导匹配结果:

# 插入位置:array数组生成后、data数组生成后
mean = np.mean(array, axis=0)
std = np.std(array, axis=0)
# 套餐数组标准化
array = (array - mean) / std
# 用户数组用相同的均值和标准差做标准化,保证计算逻辑一致
data = (data - mean) / std

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:24:10