重置列名并移除索引,将垂直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
相关产品推荐
相关产品推荐

