如何使用Python Pandas将同名列堆叠为多行表格结构?
Python实现重复列名表格的堆叠合并
你可以用Pandas库的pd.wide_to_long()函数来实现这个需求,它专门用于将宽格式表格转换为长格式,尤其适合处理带有重复列名的场景。以下是具体实现步骤:
1. 构建原始DataFrame
首先把你提供的表格转换成Pandas的DataFrame:
import pandas as pd # 原始表格数据 df = pd.DataFrame( [[123, 1, 6, 7, 3], [456, 2, 8, 9, 7]], columns=['id', 'a', 'b', 'a', 'b'] )
2. 使用pd.wide_to_long()处理
这个函数会自动识别重复的列名(a和b),将它们堆叠成多行,并保留id作为标识列:
# 转换表格,stubnames指定要堆叠的重复列名,i指定标识列,j是临时分组列 result = pd.wide_to_long(df, stubnames=['a', 'b'], i='id', j='temp', suffix='.*') # 重置索引并移除临时分组列 result = result.reset_index(drop=False).drop('temp', axis=1) # 按id排序(可选,保证结果顺序和示例一致) result = result.sort_values('id').reset_index(drop=True)
3. 最终结果
运行后得到的result就是你需要的表格结构:
| id | a | b |
|---|---|---|
| 123 | 1 | 6 |
| 123 | 7 | 3 |
| 456 | 2 | 8 |
| 456 | 9 | 7 |
备选方法:使用melt()+透视表
如果需要更灵活的处理,也可以结合melt()和透视表实现:
# 先给重复列名添加分组后缀 df.columns = ['id', 'a_1', 'b_1', 'a_2', 'b_2'] # 转换为长格式 melted = df.melt(id_vars='id', var_name='col_group', value_name='value') # 拆分列名得到原始列名和分组号 melted[['col', 'group']] = melted['col_group'].str.split('_', expand=True) # 透视回宽格式并整理 result = melted.pivot_table( index=['id', 'group'], columns='col', values='value', aggfunc='first' ).reset_index(drop=False).drop('group', axis=1) result = result.sort_values('id').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

