Python Pandas: 基于经纬度距离筛选商品分配会员
import pandas as pd
import math
outfile = r"D:\pythonProject3\打包问题\会员信息 - 副本.xlsx"
writer = pd.ExcelWriter(outfile, engine='openpyxl')
for i in range(1, 32):
# 加载商品信息表和会员信息表
product_info = pd.read_excel("D:\pythonProject3\商品信息\商品打包.xlsx")
member_info = pd.read_excel("D:\pythonProject3\打包问题\会员信息.xlsx", sheet_name=f'会员信息{i}')
# 对商品信息表按照经纬度排序
product_info.sort_values(by=['新商品GPS经度', '新商品GPS纬度'], inplace=True)
# 初始化会员挑选到商品的数量
member_info['挑选商品数量'] = 0
# 遍历每个会员
for i in range(len(member_info)):
member = member_info.iloc[i]
# 获取会员的GPS经纬度
member_latitude = member['会员GPS纬度']
member_longitude = member['会员GPS经度']
# 获取会员的预订商品限额
limit = member['预订商品限额']
# 初始化商品数量和总距离
selected_quantity = 0
total_distance = 0
# 遍历每个商品
for j in range(len(product_info)):
product = product_info.iloc[j]
# 获取商品的GPS经纬度和打包数量
product_latitude = product['新商品GPS纬度']
product_longitude = product['新商品GPS经度']
quantity = product['打包数量']
# 计算商品与会员之间的距离
distance = math.sqrt(
(member_latitude - product_latitude) ** 2 + (member_longitude - product_longitude) ** 2)
# 判断商品与会员之间的距离是否满足要求
if distance <= 1:
# 判断挑选该商品是否会超过预订商品限额
if selected_quantity + quantity <= limit:
# 更新商品数量和总距离
selected_quantity += quantity
total_distance += distance
else:
break
# 更新会员挑选到商品的数量
member_info.at[i, '挑选商品数量'] = selected_quantity
# 输出每个会员挑选到商品的数量
print(member_info['挑选商品数量'])
member_info.to_excel(writer, sheet_name=f'会员信息{i}', index=False, columns=['会员编号', '会员GPS纬度', '会员GPS经度', '信誉值', '预订商品比例', '挑选商品数量'])
writer.save()
本代码使用Python Pandas库,根据会员和商品的经纬度信息,计算距离,并按照预订商品限额分配商品给会员。最终将结果输出到Excel文件,每个sheet对应一个会员信息,并命名为“会员信息1”到“会员信息31”。
代码功能:
- 读取商品信息和会员信息表格。
- 对商品信息表格按照经纬度排序。
- 遍历每个会员,计算会员与每个商品之间的距离。
- 根据距离和预订商品限额,分配商品给会员。
- 将分配结果输出到Excel文件,每个sheet对应一个会员信息。
代码解释:
pd.read_excel()函数用于读取Excel表格数据。member_info.iloc[i]用于获取每个会员的信息。math.sqrt()函数用于计算两点之间的距离。member_info.at[i, '挑选商品数量']用于更新每个会员的挑选商品数量。member_info.to_excel()函数将结果输出到Excel文件。
使用方法:
- 确保已经安装了Python和Pandas库。
- 将代码保存为
.py文件。 - 将代码中的文件路径替换为实际的文件路径。
- 运行代码。
输出结果:
代码运行结束后,将在指定目录生成一个名为“会员信息 - 副本.xlsx”的Excel文件,每个sheet对应一个会员信息,并命名为“会员信息1”到“会员信息31”。
原文地址: https://www.cveoy.top/t/topic/fAvv 著作权归作者所有。请勿转载和采集!