- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
Point2D
表:+-------------+------+ | Column Name | Type | +-------------+------+ | x | int | | y | int | +-------------+------+ (x, y) 是该表的主键列(具有唯一值的列的组合)。 这张表的每一行表示 X-Y 平面上一个点的位置
p1(x1, y1)
和p2(x2, y2)
这两点之间的距离是sqrt((x2 - x1)2 + (y2 - y1)2)
。编写解决方案,报告
Point2D
表中任意两点之间的最短距离。保留 2 位小数 。返回结果格式如下例所示。
示例 1:
输入: Point2D table: +----+----+ | x | y | +----+----+ | -1 | -1 | | 0 | 0 | | -1 | -2 | +----+----+ 输出: +----------+ | shortest | +----------+ | 1.00 | +----------+ 解释:最短距离是 1.00 ,从点 (-1, -1) 到点 (-1, 2) 。
三,建表语句
import pandas as pd
data = [[-1, -1], [0, 0], [-1, -2]]
point2_d = pd.DataFrame(data, columns=['x', 'y']).astype({'x':'Int64', 'y':'Int64'})
point2_d
四,分析
题解:
表:2d表
字段:x轴坐标,y轴左表
求 两点之间最短的距离
第一步 内连接: pandas中做一个笛卡尔连接 可以巧用辅助列实现
# pandas中实现笛卡尔连接 最妙的办法就是生成一个辅助列 用内连接 然后连接这个辅助列~ 最后在删除这个辅助列即可
point2_d['temp']=1
df = pd.merge(point2_d,point2_d, how='inner', on='temp').drop('temp',axis=1)
df
第二步:pandas中 多列一起条件过滤 也可以用辅助列实现
比如创建2个辅助列,条件过滤之后,在删除则这个辅助列
df
#%%
df['temp1'] = df['x_x']+df['y_x'] #条件 辅助列1
df['temp2'] = df['x_y']+df['y_y'] #条件 辅助列2
df = df[df['temp1'] != df['temp2']] #然后在条件过滤
df = df.drop(['temp1','temp2'],axis=1)
df
第三步:导入numpy包 ,使用np包中的指函数和幂函数进行运算 最后得到全部两点之间的距离
#按公式计算 在最小值取出来
import numpy as np
df['shortest'] = np.sqrt( np.power( (df['x_x']-df['x_y']) , 2) + np.power( (df['y_x'] - df['y_y']) ,2))
df
最后一步。取最小值即可
pandas中是创建了一个新的df对象 然后把最小值赛进去
五,Pandas解答
import pandas as pd
def shortest_distance(point2_d: pd.DataFrame) -> pd.DataFrame:
# pandas中实现笛卡尔连接 最妙的办法就是生成一个辅助列 用内连接 然后连接这个辅助列~ 最后在删除这个辅助列即可
point2_d['temp']=1
df = pd.merge(point2_d,point2_d, how='inner', on='temp').drop('temp',axis=1)
#辅助线
df['temp1'] = df['x_x']+df['y_x'] #条件 辅助列1
df['temp2'] = df['x_y']+df['y_y'] #条件 辅助列2
df = df[df['temp1'] != df['temp2']] #然后在条件过滤
df = df.drop(['temp1','temp2'],axis=1)
#按公式计算 在最小值取出来
import numpy as np
df['shortest'] = np.sqrt( np.power( (df['x_x']-df['x_y']) , 2) + np.power( (df['y_x'] - df['y_y']) ,2))
df_res = pd.DataFrame()
df_res['shortest'] = [round(df['shortest'].min(),2)]
return df_res
shortest_distance(point2_d)
六,验证
七,知识点总结
- Pandas中要实现笛卡尔连接 可以妙用辅助列实现
- Pandas中内连接的运用 API: merge
- Pandas中删除列的运用 API: drop。。axis=1
- Pandas中多列条件过滤的运用
- 妙用辅助列,开两个辅助列 相互拼接在一起 如果他们都不等于即可
- 最后在删除这个2个辅助内
- Pandas中引入numpy包中的指函数和幂函数 计算两点之间最短的距离
- Pandas中创建dataframe对象的运用
- Pandas中计算最小值的运用 min
- Pandas中四舍五入的运用 round
- python函数的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用