如何按线性间隔扩展Python Pandas DataFrame?初学者技术求助
实现Pandas坐标点半单位间隔插值扩展
没问题,我来帮你搞定这个需求!下面是具体的实现步骤和代码,完全贴合你想要的输出格式:
1. 构造初始DataFrame
首先我们先把你给出的原始数据转换成Pandas DataFrame:
import pandas as pd import numpy as np # 你的初始数据 df = pd.DataFrame({ 'x1': [0, 10], 'y1': [0, 10], 'x2': [2, 12], 'y2': [2, 12] })
2. 编写插值函数并应用到每一行
我们可以写一个自定义函数,对每一行的起点(x1,y1)和终点(x2,y2)生成半单位间隔的插值点,同时保留原始的四列数据:
def generate_interpolated_points(row): # 生成x轴的插值序列(包含起点和终点) interpolated_x = np.arange(row['x1'], row['x2'] + 0.5, 0.5) # 生成y轴的插值序列(和x轴长度一致) interpolated_y = np.arange(row['y1'], row['y2'] + 0.5, 0.5) # 构造当前行对应的扩展DataFrame expanded_row = pd.DataFrame({ 'x1': [row['x1']] * len(interpolated_x), 'y1': [row['y1']] * len(interpolated_x), 'x2': [row['x2']] * len(interpolated_x), 'y2': [row['y2']] * len(interpolated_x), 'Interpolated_X': interpolated_x, 'Interpolated_Y': interpolated_y }) return expanded_row # 对每一行应用函数,然后合并所有结果 final_df = pd.concat(df.apply(generate_interpolated_points, axis=1).tolist(), ignore_index=True)
3. 查看结果
运行上面的代码后,final_df就是你想要的格式:
x1 y1 x2 y2 Interpolated_X Interpolated_Y 0 0 0 2 2 0.0 0.0 1 0 0 2 2 0.5 0.5 2 0 0 2 2 1.0 1.0 3 0 0 2 2 1.5 1.5 4 0 0 2 2 2.0 2.0 5 10 10 12 12 10.0 10.0 6 10 10 12 12 10.5 10.5 7 10 10 12 12 11.0 11.0 8 10 10 12 12 11.5 11.5 9 10 10 12 12 12.0 12.0
关键细节说明
- 用
np.arange生成序列时,我们给终点加了0.5,因为np.arange是左闭右开区间,这样才能确保包含终点值(比如2和12)。 - 对每一行生成的小DataFrame,我们通过
pd.concat合并成最终的大DataFrame,ignore_index=True用来重置索引,避免出现重复的行号。
内容的提问来源于stack exchange,提问作者Mark A
相关产品推荐
相关产品推荐

