import pandas as pd
import numpy as np
import math

# 初始化结果列表
output_results = []

for jishu in range(1, 33):
    # 读取商品信息
    goods_df = pd.read_excel('D:\pythonProject3\商品信息\商品打包.xlsx')
    goods_df = goods_df[['新商品GPS纬度', '新商品GPS经度', '商品编号', '打包数量']]
    goods_df = goods_df.dropna()

    # 读取会员信息
    members_df = pd.read_excel('D:\pythonProject3\打包问题\会员信息.xlsx', sheet_name=f'会员信息{jishu}')
    members_df = members_df[['会员编号', '会员GPS纬度', '会员GPS经度', '预订商品限额']]
    members_df = members_df.dropna()

    # 初始化会员挑选结果
    results = []

    # 遍历每个会员
    for index, member in members_df.iterrows():
        member_id = member['会员编号']
        member_lat = member['会员GPS纬度']
        member_lon = member['会员GPS经度']
        member_limit = member['预订商品限额']

        # 初始化会员挑选的商品数量和商品编号
        selected_quantity = 0
        selected_goods = []

        # 遍历商品列表
        for index, good in goods_df.iterrows():
            good_id = good['商品编号']
            good_lat = good['新商品GPS纬度']
            good_lon = good['新商品GPS经度']
            good_quantity = good['打包数量']

            # 计算会员和商品之间的距离
            distance = math.sqrt((member_lat - good_lat) ** 2 + (member_lon - good_lon) ** 2)

            # 如果距离小于等于0.1并且商品数量加上已选商品数量不超过会员限额
            if distance <= 0.1 and selected_quantity + good_quantity <= member_limit:
                # 更新已选商品数量和商品编号
                selected_quantity += good_quantity
                selected_goods.append(good_id)

        # 添加会员挑选结果到结果列表
        results.append({'会员编号': member_id, '预订商品限额': member_limit, '挑选商品数量': selected_quantity, '挑选商品编号': selected_goods})

    # 输出结果
    for result in results:
        output_results.append(result)

# 将结果转换为DataFrame
output_df = pd.DataFrame(output_results)

# 将结果写入Excel文件的同一列
output_path = r'D:\pythonProject3\打包问题\结果.xlsx'
with pd.ExcelWriter(output_path, mode='a', engine='openpyxl') as writer:
    output_df.to_excel(writer, sheet_name='会员信息', index=False, startrow=1, header=False)
Python基于地理位置的商品打包算法

原文地址: https://www.cveoy.top/t/topic/fAJV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录