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

如何将Pandas DataFrame中固定列后的重复列数据移至新行?

Pandas重复列组转多行解决方案

现有一个仅含2行但包含多组重复列(如A、B、C、D重复出现)的DataFrame,需要将每一组重复列转换为新行,实现行列结构的重组。

示例输入

A   B   C  D    A   B   C   D
hel   1   3   5  9    1   3   5   8
good  1   6   5  8    2   4   5   8

期望输出

A   B   C  D    
hel   1   3   5  9    
good  1   6   5  8 
hel   1   3   5  8
good  2   4   5  8

核心思路

按固定列数(每组列的数量,比如这里是4)将原DataFrame拆分为多个子DataFrame,再将这些子DataFrame纵向拼接,即可实现列组转多行的效果。

代码实现

import pandas as pd

# 构造示例DataFrame(模拟重复列场景)
df = pd.DataFrame(
    [[1, 3, 5, 9, 1, 3, 5, 8], [1, 6, 5, 8, 2, 4, 5, 8]],
    index=['hel', 'good'],
    columns=['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D']
)

# 定义每组的列数(根据实际场景调整)
group_col_count = 4

# 按列位置拆分出所有列组对应的子DataFrame
sub_dfs = [df.iloc[:, i:i+group_col_count] for i in range(0, len(df.columns), group_col_count)]

# 统一所有子DataFrame的列名(避免重复列名导致的后缀问题)
for sub_df in sub_dfs:
    sub_df.columns = ['A', 'B', 'C', 'D']  # 替换为实际的组列名

# 纵向拼接所有子DataFrame,得到最终结果
result_df = pd.concat(sub_dfs, axis=0)

print(result_df)

代码说明

  • iloc[:, i:i+group_col_count]:通过列位置切片拆分,不受重复列名自动加后缀的影响,适用于列组连续重复的场景。
  • 统一列名:确保每个子DataFrame的列名一致,保证拼接后结构正确。
  • pd.concat(sub_dfs, axis=0):将多个子DataFrame按行堆叠,保留原索引,实现列组到多行的转换。

拓展场景

如果列组不是连续重复,而是按列名分散排列(比如所有A列在一起,所有B列在一起),可以改用按列名分组的方式:

# 获取唯一列名
unique_columns = df.columns.unique()

# 提取每列的所有数据并转成行
column_dfs = []
for col in unique_columns:
    col_series = df[col].stack().reset_index(level=1, drop=True)
    column_dfs.append(col_series)

# 合并为最终DataFrame
result_df = pd.concat(column_dfs, axis=1)
result_df.columns = unique_columns

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:23:28