You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:33:57