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

如何将Pandas DataFrame连续3行合并为单行写入新DataFrame?

如何将Pandas DataFrame中每行与后续N行合并为单行

看起来你想要把原DataFrame里的每一行和它后面的2行打包成新DataFrame的一行,我来帮你修正代码并解释更高效的实现方式。

首先,先分析你现有代码里的几个问题:

  • 你用了df.items()来遍历,这其实是在遍历DataFrame的列,而不是行,所以index变量拿到的是列名,不是行索引,导致后续的iloc切片完全错误
  • 你写的index:index+6是想取6行,但你的需求是当前行+后续2行,总共3行
  • 重复的列名会导致后续操作混乱,最好给合并后的列加个后缀区分

高效解决方案(用Pandas矢量化操作,避免循环)

Pandas的shift()方法是处理这种行移位需求的最佳工具,比循环遍历行高效得多,尤其是数据量大的时候。下面是完整的可运行代码:

import pandas as pd

# 读取你的数据文件
path = r'C:\Users\Ahmed Ismail Khalid\Desktop\Research Paper\Training and Validation.csv'
df = pd.read_csv(path)

# 1. 获取当前行、下一行、下两行的数据,分别添加后缀区分(避免列名重复)
df_current = df.add_suffix('_0')  # 当前行,后缀_0
df_next1 = df.shift(-1).add_suffix('_1')  # 下一行,后缀_1
df_next2 = df.shift(-2).add_suffix('_2')  # 下两行,后缀_2

# 2. 按列拼接这三个DataFrame,得到每行对应原3行的新结构
new_df = pd.concat([df_current, df_next1, df_next2], axis=1)

# 3. 删除最后2行(因为它们没有足够的后续行,会包含NaN)
new_df = new_df.dropna()

# 如果你一定要用重复的列名(不推荐,会导致索引混乱),可以执行下面这行
# new_df.columns = df.columns.tolist() * 3

print(new_df)

代码解释

  • shift(-1):把整个DataFrame向下移动一行,原来的第2行变成第1行,最后一行变成NaN
  • add_suffix():给每个列名加上后缀,比如F1变成F1_0,这样能清晰区分是原数据的哪一行
  • concat([...], axis=1):把三个DataFrame按列拼在一起,形成每行包含原3行数据的新结构
  • dropna():自动删除包含NaN的行,也就是原数据的最后2行,完美解决你提到的NaN问题

示例输出(用你提供的样例数据)

假设原数据是:

F1F2F3F4Label
1234Dog
2345Cat
3456Cat
4567Dog
5678Cat
6789Dog

运行代码后得到的new_df(带后缀):

F1_0F2_0F3_0F4_0Label_0F1_1F2_1F3_1F4_1Label_1F1_2F2_2F3_2F4_2Label_2
1234Dog2345Cat3456Cat
2345Cat3456Cat4567Dog
3456Cat4567Dog5678Cat
4567Dog5678Cat6789Dog

如果你去掉后缀,就会得到你想要的重复列名结构,但还是建议保留后缀,避免后续操作中因为列名重复出现问题。

内容的提问来源于stack exchange,提问作者Stevi G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:20:31