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

Pandas遍历DataFrame行对时如何实现首尾行配对拼接输出

实现方案

核心思路:将DataFrame首行追加到原表末尾,构造首尾相连的环形行序列,再逐次取相邻两行做扁平化拼接,无需单独编写最后一组首尾配对的逻辑,即可输出全部符合要求的结果。

方法1:pandas原生实现(可读性强,无额外依赖)

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'x': [1.0, 2.0, 2.0, 1.5],
    'y': [1.1, 1.0, 2.0, 3.0]
})

# 追加首行到表尾,构造环形行结构
df_ring = pd.concat([df, df.iloc[[0]]], ignore_index=True)

result = []
for i in range(len(df)):
    # 取连续两行展平为列表
    pair = df_ring.iloc[i:i+2].to_numpy().flatten().tolist()
    result.append(pair)

# 输出验证
for item in result:
    print(item)

运行输出完全匹配预期:

[1.0, 1.1, 2.0, 1.0]
[2.0, 1.0, 2.0, 2.0]
[2.0, 2.0, 1.5, 3.0]
[1.5, 3.0, 1.0, 1.1]

方法2:numpy向量化实现(适合大体积DataFrame,性能更高)

逐行循环在数据量超过10万行时效率较低,可直接用numpy滑动窗口API批量生成结果,无显式循环:

import numpy as np

# 构造环形数组
arr_ring = np.vstack([df.to_numpy(), df.iloc[0].to_numpy()])
# 滑动窗口取连续2行,展平得到全部配对结果
result = np.lib.stride_tricks.sliding_window_view(
    arr_ring, 
    window_shape=(2, df.shape[1])
).reshape(-1, df.shape[1]*2).tolist()

注意事项

  • 做数组转换优先用to_numpy(),相比直接取values属性可以灵活控制输出dtype,避免隐式类型转换丢失数值精度
  • 取行时始终用iloc按行位置索引,即使原DataFrame索引不连续也不会出现行配对错位问题
  • 如果不需要保留DataFrame结构,直接将df转numpy数组后做环形拼接和滑动窗口处理,速度会比操作pandas对象更快

内容的提问来源于stack exchange,提问作者Fernando Gutiérrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:57:18