如何用Pandas将宽深维度转换为多边形四角坐标?
高效将Pandas DataFrame的W/D列转换为多边形顶点坐标
针对你需要把每行的宽度(W)、深度(D)转换为四个顶点坐标的需求,这里提供两种高效的实现方式,避免手动循环追加的低效操作:
方法一:全向量化实现(适合大数据量)
这种方式完全利用Pandas的向量化运算,避免逐行处理,性能最优:
import pandas as pd # 原始输入DataFrame df = pd.DataFrame({'W': [100, 125], 'D': [150, 170]}) # 定义四个顶点的系数模板:(X系数, Y系数) vertex_coeffs = [(0, 0), (0, 1), (1, 0), (1, 1)] # 将原始数据的每行重复4次,对应四个顶点 expanded_df = df.loc[df.index.repeat(4)].reset_index(drop=True) # 生成对应行数的系数DataFrame coeff_df = pd.DataFrame(vertex_coeffs * len(df), columns=['x_coeff', 'y_coeff']) # 计算最终的X、Y坐标 result_df = pd.DataFrame({ 'X': expanded_df['W'] * coeff_df['x_coeff'], 'Y': expanded_df['D'] * coeff_df['y_coeff'] }) print(result_df)
方法二:利用explode简化代码(适合中小数据量)
如果数据量不大,这种方式代码更简洁易读:
import pandas as pd df = pd.DataFrame({'W': [100, 125], 'D': [150, 170]}) # 为每行生成对应的四个顶点列表 df['vertices'] = df.apply( lambda row: [(0, 0), (0, row['D']), (row['W'], 0), (row['W'], row['D'])], axis=1 ) # 展开顶点列表,并拆分出X、Y列 result_df = df.explode('vertices').reset_index(drop=True) result_df[['X', 'Y']] = pd.DataFrame(result_df['vertices'].tolist()) result_df = result_df.drop(columns=['W', 'D', 'vertices']) print(result_df)
两种方法都能输出你期望的结果,其中方法一的向量化操作在处理十万级以上数据时,速度会比手动循环快一个数量级以上。
内容的提问来源于stack exchange,提问作者highoncoffee
相关产品推荐
相关产品推荐

