pandas如何为DataFrame每行生成多条矩形角点坐标数据
解决方案
直接用apply生成角点列表后调用explode炸开即可,代码简洁高效,无需手动循环处理每个对象:
完整实现代码
import pandas as pd # 构造测试数据(你实际使用时替换为自己的df即可) df = pd.DataFrame({ 'Thing': ['A', 'B'], 'x': [1, 2], 'y': [3, 3], 'length_x': [1, 2], 'length_y': [2, 1] }) def generate_corners(row): lx_half = row['length_x'] / 2 ly_half = row['length_y'] / 2 x, y = row['x'], row['y'] # 按你给出的坐标顺序生成5个点,最后一个重复第一个用于闭合POLYGON return [ (x + lx_half, y), (x + lx_half, y - ly_half), (x - lx_half, y), (x - lx_half, y - ly_half), (x + lx_half, y) ] # 生成角点列并炸开 df['corners'] = df.apply(generate_corners, axis=1) df = df.explode('corners', ignore_index=True) # 拆分角点为x、y两列,调整输出列顺序 df[['Corner_x', 'Corner_y']] = pd.DataFrame(df['corners'].tolist(), index=df.index) df = df[['Thing', 'x', 'y', 'Corner_x', 'Corner_y', 'length_x', 'length_y']] print(df)
输出验证
运行后输出结果与你要求的结构完全一致,若角点顺序不符合你的使用需求,只需调整generate_corners函数中返回列表的元组顺序即可。
内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes
相关产品推荐
相关产品推荐

