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

如何高效重塑DataFrame:分组横向列转纵向并保留指定列?

高效重塑DataFrame的方法

当然有高效且易维护的方法来完成这个DataFrame重塑需求!下面我会用pandas给出两种实用方案,分别适合不同场景。

方法一:拆分+重命名+拼接(直观易读)

这种方法逻辑清晰,非常适合新手理解,而且处理速度也很高效。核心思路是把A/B/C每组数据单独提取、重命名,再纵向拼接在一起。

首先我们先构造示例数据(模拟你的原始DataFrame):

import pandas as pd

data = {
    'A1': [11]*6, 'A2': [22]*6, 'A3': [33]*6,
    'B1': [44]*6, 'B2': [55]*6, 'B3': [66]*6,
    'C1': [77]*6, 'C2': [88]*6, 'C3': [99]*6,
    'TT': [23]*6, 'YY': [24]*6, 'ZZ': [25]*6
}
df = pd.DataFrame(data)

接下来执行重塑操作:

# 提取A组并重命名列
df_a = df[['A1', 'A2', 'A3', 'TT', 'YY', 'ZZ']].rename(columns={'A1':'HH', 'A2':'JJ', 'A3':'KK'})
# 提取B组并重命名列
df_b = df[['B1', 'B2', 'B3', 'TT', 'YY', 'ZZ']].rename(columns={'B1':'HH', 'B2':'JJ', 'B3':'KK'})
# 提取C组并重命名列
df_c = df[['C1', 'C2', 'C3', 'TT', 'YY', 'ZZ']].rename(columns={'C1':'HH', 'C2':'JJ', 'C3':'KK'})

# 纵向拼接三个子DataFrame,重置索引
result = pd.concat([df_a, df_b, df_c], ignore_index=True)

方法二:批量处理(扩展性强)

如果你的DataFrame后续可能新增D/E等更多组,用循环批量处理会更高效,避免重复写冗余代码:

import pandas as pd

# 定义所有需要处理的组
groups = ['A', 'B', 'C']
result_dfs = []

for group in groups:
    # 构造当前组的列名列表
    group_cols = [f'{group}{num}' for num in [1,2,3]] + ['TT', 'YY', 'ZZ']
    # 提取列并重命名
    temp_df = df[group_cols].rename(columns={
        f'{group}1': 'HH',
        f'{group}2': 'JJ',
        f'{group}3': 'KK'
    })
    result_dfs.append(temp_df)

# 拼接所有处理后的子DataFrame
result = pd.concat(result_dfs, ignore_index=True)

验证结果

执行完上述代码后,你可以用print(result)查看最终格式,完全符合你需要的:HH/JJ/KK对应A/B/C组的纵向堆叠,TT/YY/ZZ会自动和每组数据对应重复保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:13:10