用Python计算Excel中三组数据的曼哈顿距离
时间: 2023-05-28 08:07:50 浏览: 159
假设Excel中三组数据分别为A1:A5、B1:B5、C1:C5,可以使用Pandas库读取Excel数据,并使用numpy库计算曼哈顿距离。
代码如下:
```python
import pandas as pd
import numpy as np
# 读取Excel数据
df = pd.read_excel('data.xlsx')
# 提取三组数据
A = df['A'].values
B = df['B'].values
C = df['C'].values
# 计算曼哈顿距离
dist_AB = np.sum(np.abs(A - B))
dist_AC = np.sum(np.abs(A - C))
dist_BC = np.sum(np.abs(B - C))
print('曼哈顿距离AB:', dist_AB)
print('曼哈顿距离AC:', dist_AC)
print('曼哈顿距离BC:', dist_BC)
```
其中,np.abs()函数用于计算绝对值,np.sum()函数用于计算数组元素的和。运行代码后,会输出三组数据的曼哈顿距离。
相关问题
# 导入pandas库 import pandas as pd # 读取excel文件的两个sheet sheet1 = pd.read_excel("对照组.xlsx", sheet_name="idle_transition_probability") sheet2 = pd.read_excel("对照组.xlsx", sheet_name="hexagon_grid_table") # 把sheet转换成字典列表 sheet1 = sheet1.to_dict(orient="records") sheet2 = sheet2.to_dict(orient="records") # 创建一个空的字典,用来存储区域id和坐标的对应关系 area_dict = {} # 选择sheet1的第2列和第3列 sheet1 = sheet1.iloc[:, [1, 2]] # 把sheet1的第2列和第3列的数据转换成列表 start_area_list = sheet1.iloc[:, 0].tolist() end_area_list = sheet1.iloc[:, 1].tolist() # 用zip函数把两个列表组合成一个迭代器 area_pairs = zip(start_area_list, end_area_list) # 用for循环遍历每一对上下车地点所在区域的id for start_area, end_area in area_pairs: # 根据id从字典中获取对应的坐标 start_coord = area_dict[start_area] end_coord = area_dict[end_area] # 遍历sheet2,把区域id作为键,坐标作为值,存入字典中 for row in sheet2: area_id = row["格子ID"] longitude = row["中心经度"] latitude = row["中心维度"] area_dict[area_id] = (longitude, latitude) # 创建一个空的列表,用来存储每个时间段的曼哈顿距离 distance_list = [] # 计算两个坐标之间的x轴距离和y轴距离 x_distance = abs(end_coord[0] - start_coord[0]) y_distance = abs(end_coord[1] - start_coord[1]) # 计算两个坐标之间的曼哈顿距离,并添加到列表中 manhattan_distance = x_distance + y_distance distance_list.append(manhattan_distance) # 创建一个空的DataFrame df = pd.DataFrame() # 把列表添加到DataFrame中,指定列名 df["曼哈顿距离"] = distance_list # 把DataFrame保存到Excel文件中,指定文件名和sheet名 df.to_excel("result.xlsx", sheet_name="result")请你帮我修改一下
好的,以下是修改后的代码:
```python
# 导入pandas库
import pandas as pd
# 读取excel文件的两个sheet
sheet1 = pd.read_excel("对照组.xlsx", sheet_name="idle_transition_probability")
sheet2 = pd.read_excel("对照组.xlsx", sheet_name="hexagon_grid_table")
# 把sheet转换成字典列表
sheet1 = sheet1.to_dict(orient="records")
sheet2 = sheet2.to_dict(orient="records")
# 创建一个空的字典,用来存储区域id和坐标的对应关系
area_dict = {}
# 选择sheet1的第2列和第3列
sheet1 = pd.DataFrame(sheet1, columns=["start_area", "end_area"])
# 把sheet1的第2列和第3列的数据转换成列表
start_area_list = sheet1["start_area"].tolist()
end_area_list = sheet1["end_area"].tolist()
# 用zip函数把两个列表组合成一个迭代器
area_pairs = zip(start_area_list, end_area_list)
# 遍历sheet2,把区域id作为键,坐标作为值,存入字典中
for row in sheet2:
area_id = row["格子ID"]
longitude = row["中心经度"]
latitude = row["中心维度"]
area_dict[area_id] = (longitude, latitude)
# 创建一个空的列表,用来存储每个时间段的曼哈顿距离
distance_list = []
# 用for循环遍历每一对上下车地点所在区域的id
for start_area, end_area in area_pairs:
# 根据id从字典中获取对应的坐标
start_coord = area_dict[start_area]
end_coord = area_dict[end_area]
# 计算两个坐标之间的x轴距离和y轴距离
x_distance = abs(end_coord[0] - start_coord[0])
y_distance = abs(end_coord[1] - start_coord[1])
# 计算两个坐标之间的曼哈顿距离,并添加到列表中
manhattan_distance = x_distance + y_distance
distance_list.append(manhattan_distance)
# 创建一个空的DataFrame
df = pd.DataFrame()
# 把列表添加到DataFrame中,指定列名
df["曼哈顿距离"] = distance_list
# 把DataFrame保存到Excel文件中,指定文件名和sheet名
df.to_excel("result.xlsx", sheet_name="result")
```
主要修改如下:
1. 在读取sheet1后,使用`pd.DataFrame()`方法将其转换为DataFrame,并指定了`columns`参数,这样就可以直接使用列名来引用数据了。
2. 在计算两个坐标之间的曼哈顿距离时,将计算过程放在for循环内部,这样可以计算出每一对上下车地点的距离。
3. 在创建DataFrame时,使用`pd.DataFrame()`方法创建空的DataFrame,然后将数据添加到其中。
4. 在保存DataFrame到Excel文件中时,使用`df.to_excel()`方法,指定了文件名和sheet名。
阅读全文