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

重置列名并移除索引,将垂直DataFrame合并为无索引堆叠横向表

解决堆叠式横向表格的拼接与格式化问题

需要将两个垂直结构的DataFrame(r1、r2)合并为左侧带自定义表头、无默认索引、上下堆叠的横向表格,要求所有单元格完整展示无滚动。

原始数据

import pandas as pd

# 原始DataFrames
r1 = pd.DataFrame({
    'Stock': ['RELIANCE', 'TCS', 'HDFCBANK', 'ICICIBANK'],
    '%Change': ['(-0.62%)', '(-1.68%)', '(-0.77%)', '(-0.72%)']
})

r2 = pd.DataFrame({
    'Stock': ['LT', 'HCLTECH', 'ASIANPAINT', 'AXISBANK'],
    '%Change': ['(-0.27%)', '(-1.9%)', '(-1.48%)', '(-0.41%)']
})

当前错误尝试

现有代码逻辑错误,导致列名映射混乱,输出结构不符合需求:
输入代码:

r_concat = pd.concat([r1.transpose(),r2.transpose()],axis=0,ignore_index=True).reset_index().rename(columns={'0':'Stock','1':'%Chg','2':'Stock','3':'%Chg'}).set_index('Stock')

错误输出:

0         1           2          3           4          5        6   
0  RELIANCE       TCS    HDFCBANK  ICICIBANK  HINDUNILVR        ITC     INFY   
1  (-1.39%)   (0.03%)    (-0.65%)   (-0.15%)     (0.29%)   (-0.78%)  (0.38%)   
2        LT   HCLTECH  ASIANPAINT   AXISBANK      MARUTI  SUNPHARMA    TITAN   
3  (-0.86%)  (-0.91%)      (0.1%)    (0.01%)    (-1.44%)   (-1.43%)  (0.32%)

正确解决方案

方案1:保留股票与涨跌幅独立列

通过转置+自定义索引实现左侧表头,堆叠后展示完整横向结构:

# 转置每个DataFrame,保留股票名作为列名
r1_transposed = r1.set_index('Stock').T.reset_index(drop=True)
r1_transposed.index = ['组1']  # 设置左侧自定义表头

r2_transposed = r2.set_index('Stock').T.reset_index(drop=True)
r2_transposed.index = ['组2']

# 堆叠合并两个横向表
result = pd.concat([r1_transposed, r2_transposed])

# 隐藏默认索引,展示带自定义表头的结果
print(result.to_string(index=True))

输出效果:

RELIANCE    TCS HDFCBANK ICICIBANK       LT HCLTECH ASIANPAINT AXISBANK
组1  (-0.62%) (-1.68%) (-0.77%)  (-0.72%)      NaN     NaN        NaN      NaN
组2        NaN     NaN      NaN       NaN (-0.27%)  (-1.9%)  (-1.48%) (-0.41%)

方案2:紧凑配对展示

将股票与涨跌幅配对为单个单元格,实现更紧凑的横向堆叠:

def format_group(df, group_name):
    # 生成"股票: 涨跌幅"格式的配对列
    cols = [f"{row['Stock']}: {row['%Change']}" for _, row in df.iterrows()]
    # 构造单行DataFrame并设置左侧表头
    return pd.DataFrame([cols], index=[group_name])

# 处理两组数据并合并
group1 = format_group(r1, '组1')
group2 = format_group(r2, '组2')
result_compact = pd.concat([group1, group2])

print(result_compact.to_string(index=True))

输出效果:

0                  1                    2                     3
组1  RELIANCE: (-0.62%)  TCS: (-1.68%)  HDFCBANK: (-0.77%)  ICICIBANK: (-0.72%)
组2        LT: (-0.27%)  HCLTECH: (-1.9%)  ASIANPAINT: (-1.48%)    AXISBANK: (-0.41%)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:57:32