Python实现Excel表格中根据距离匹配多个值:A列目标点对应B列多个武器

本文将介绍如何使用Python的pandas库,将Excel表格中A列的同一个目标点,根据距离匹配B列多个不同的武器,并将结果写入新的Excel文件。

需求:

假设我们有两张Excel表格:

  • 武器表: 包含武器名称、打击范围、坐标(X,Y)等信息。* 目标表: 包含目标点名称、坐标(X,Y)等信息。

我们需要根据武器的打击范围和目标点的坐标,找到每个目标点可以被哪些武器打击,并将结果输出到一个新的Excel表格中,格式如下:

| Target | Weapons ||---|---|| 目标点1 | 武器A, 武器B || 目标点2 | 武器C || ... | ... |

**代码实现:**pythonimport pandas as pdimport math

读取Excel文件中的武器和目标数据wb_weapons = pd.read_excel('C://Users//asus//OneDrive//桌面//武器的打击范围和坐111标.xlsx', sheet_name='Weapons')wb_targets = pd.read_excel('C://Users//asus//OneDrive//桌面//读取被打击目标的坐标.xlsx', sheet_name='Targets')

转换数据为DataFrame格式df_weapons = pd.DataFrame(wb_weapons)df_targets = pd.DataFrame(wb_targets)

创建结果DataFramedf_results = pd.DataFrame(columns=['Target', 'Weapons'])

筛选每个被打击目标能被哪些武器打击for target_idx, target_row in df_targets.iterrows(): target_name = target_row['Name'] target_coordinates = (target_row['X'], target_row['Y']) weapon_names = [] # 存储能打击目标的武器名称 for weapon_idx, weapon_row in df_weapons.iterrows(): weapon_name = weapon_row['Weapon'] weapon_range = weapon_row['Range'] weapon_coordinates = (weapon_row['X'], weapon_row['Y']) distance = math.sqrt((weapon_coordinates[0] - target_coordinates[0])**2 + (weapon_coordinates[1] - target_coordinates[1])**2) if distance <= weapon_range: weapon_names.append(weapon_name) # 将每个被打击目标和对应的武器添加到结果DataFrame中 df_results = df_results.append({'Target': target_name, 'Weapons': ', '.join(weapon_names)}, ignore_index=True)

将结果写入Excel文件with pd.ExcelWriter('目标点对应武器.xlsx') as writer: df_results.to_excel(writer, sheet_name='Results', index=False)

代码解析:

  1. 导入库: 导入pandas库用于数据处理,导入math库用于计算距离。2. 读取数据: 使用pd.read_excel()函数读取武器表和目标表的数据,并使用pd.DataFrame()函数将数据转换为DataFrame格式。3. 创建结果DataFrame: 创建一个空的DataFrame,用于存储最终的结果。4. 计算距离并匹配: 使用两个嵌套的循环遍历每个目标点和每个武器,并计算它们之间的距离。如果距离小于等于武器的打击范围,则将武器名称添加到weapon_names列表中。5. 存储结果: 将每个目标点和对应的武器列表存储到结果DataFrame中。6. 写入Excel文件: 使用pd.ExcelWriter()函数将结果DataFrame写入到新的Excel文件中。

注意事项:

  • 请根据实际情况修改代码中的文件名、工作表名称和列名。* 可以根据需要调整结果写入的逻辑和格式,例如使用不同的分隔符分隔多个武器名称。
Python实现Excel表格中根据距离匹配多个值:A列目标点对应B列多个武器

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

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