【发布时间】:2021-09-03 18:40:08
【问题描述】:
我有一个代码可以在 2 个 CSV 文件之间搜索最接近的值。它读取一个名为“common_list”的 CSV 文件,其中包含一些如下所示的数据库:
| common_name | common_Price | common_Offnet | common_Traffic |
|---|---|---|---|
| name1 | 1300 | 250 | 13000 |
| name2 | 1800 | 350 | 18000 |
代码将这些 CSV 行放入一个列表中,然后创建 NumPy 数组。
common_list = pd.read_csv("common_list.csv")
common_list_offnet = common_list["common_Offnet"].to_list()
common_list_traffic = common_list["common_Traffic"].to_list()
array_offnet = np.array(common_list_offnet)
array_traffic = np.array(common_list_traffic)
array = np.column_stack((array_offnet,array_traffic))
我们将此 CSV 文件用作可用手机套餐的数据库(套餐名称、价格、网外通话和互联网流量)。
然后,代码读取另一个名为“By_ARPU”的 CSV 文件,其中包含 100k+ 行的用户以及他们如何使用手机套餐(他们花了多少钱(套餐价格)、多少网外通话和流量)。此 CSV 文件的标题如下所示:
| User ID | ARPU_AVERAGE | Offnet Calls | Traffic (MB) |
|---|
其中 ARPU_AVERAGE 对应于用户花费的金额(他们支付的价格)。该代码通过 2 个参数找到 CSV 文件之间最接近的值:Offnet calls 和 Traffic (MB)。
csv_data = pd.read_csv("By_ARPU.csv")
data = csv_data[['Offnet Calls', 'Traffic (MB)']]
data = data.to_numpy()
sol = []
for target in data:
dist = np.sqrt((np.square(array[:,np.newaxis]-target).sum(axis=2))
idx = np.argmin(dist)
sol.append(idx)
csv_data["Suggested Plan [SP]"] = common_list['common_name'][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)
它从数据库中找到最接近的值,并显示名称和相应的网外呼叫、流量。例如,如果在“By_ARPU”文件中,Offnet calls 和 Traffic (MB) 的值分别为 250 和 13000,它将显示与“common_list”最接近的值的名称,即 name1。
我想为相同的搜索创建额外的代码,但有 3 个参数。您可以看到第一个数据库“common_list”有 3 个参数:common_Price、common_Offnet 和 common_Offnet。在前面的代码中,我们通过 2 个值找到了最接近的值。
在不同的 CSV 文件中,与其他列对应的是:common_list 中的“common_Offnet” - By_ARPU 中的“Offnet calls” AND common_list 中的“common_Traffic” - By_ARPU 中的“Traffic (MB)”。
我想要:
通过 3 个参数找到最接近的值:价格、离线通话和流量。 “By_ARPU”文件中与价格对应的列称为“AVERAGE_APRU”。
请帮助修改代码以通过按这 3 个参数而不是 2 个参数进行搜索来找到最接近的值。
【问题讨论】: