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

如何将Pandas单列按每3行一组拆分至三列?

问题:将Pandas单列DataFrame按3行一组重组为多列

现有一个包含数千行的Pandas单列DataFrame,示例如下:

0
0    \\\\path_1\\file1.csv
1    23082022 DS
2    520i2146002
3    \\\\path_2\\file2.csv
4    230822 NS
5    520i2146002
6    \\\\path_3\\file3.csv
7    24082022 DS
8    520i2146002

需要将每3行一组的后两行分别放入第二、第三列,目标输出如下:

0            1            2     
0    \\\\path_1\\file1.csv  23082022 DS  520i2146002
1    \\\\path_2\\file2.csv    230822 NS  520i2146002
2    \\\\path_3\\file3.csv  24082022 DS  520i2146002

目前仅能通过以下代码提取奇偶行:

df = pd.DataFrame({0: df[0].iloc[::2].values, 'value': df[0].iloc[1::2].values})

寻求实现目标输出的解决方案。


解决方案

方法一:使用reshape快速重组(推荐,效率更高)

适合大数据量场景,直接通过数组变形实现:

import pandas as pd

# 重置索引,避免原始索引不连续/重复导致的问题
df = df.reset_index(drop=True)

# 将单列数据按每3行一组,重组为3列的DataFrame
result = pd.DataFrame(df[0].values.reshape(-1, 3), columns=[0, 1, 2])

说明:reshape(-1, 3)会自动计算行数,把一维数组转换为N行3列的二维结构,直接传入pd.DataFrame即可得到目标格式。

方法二:使用groupby分组重组

如果需要更灵活的分组逻辑,可以用分组方式实现:

# 按行号整除3生成分组键,每个组对应一组3行数据
result = df.groupby(df.index // 3)[0].apply(pd.Series).reset_index(drop=True)

说明:df.index // 3为每3行生成相同的分组标识,apply(pd.Series)会把组内的3个元素展开为3列,最后重置索引得到连续行号。

两种方法均可实现需求,其中reshape方法在处理数千行数据时速度更快。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28