如何使用combinations提取pandas DataFrame中点对构成的直线避免坐标混淆
解决方法
你之前的写法是按列执行组合操作,会自动拆分x、y坐标的对应关系,直接对整行打包后的点集合做组合即可得到预期结果,无需后续重排序。
实现代码
from itertools import combinations # 先将每行的x、y坐标打包为(x, y)元组,保留坐标对应关系 points = list(zip(x_s['x_val'], x_s['y_val'])) # 直接生成所有两两不重复的完整点对 point_pairs = list(combinations(points, 2))
输出说明
生成的point_pairs每个元素格式为((x1, y1), (x2, y2)),对应一条直线的两个完整坐标点,完全符合需求。用你提供的示例数据执行后,输出结果为:
[((1.28, 1.72), (3.47, 3.71)), ((1.28, 1.72), (0.13, 1.86)), ((3.47, 3.71), (0.13, 1.86))]
可选扩展:转DataFrame格式
如果需要结构化存储后续处理,可以把结果转为DataFrame:
import pandas as pd line_df = pd.DataFrame(point_pairs, columns=['point1', 'point2']) # 拆分坐标为单独列 line_df[['x1', 'y1']] = pd.DataFrame(line_df['point1'].tolist(), index=line_df.index) line_df[['x2', 'y2']] = pd.DataFrame(line_df['point2'].tolist(), index=line_df.index) line_df = line_df.drop(columns=['point1', 'point2'])
核心逻辑是先绑定每个点的x、y坐标为一个整体,再做组合操作,从根源上避免坐标对应关系错乱。
内容的提问来源于stack exchange,提问作者RD7
相关产品推荐
相关产品推荐

