如何让Pandas DataFrame在页面中以多列形式展示数据?
将长窄Pandas DataFrame转为多列重复排列的实现方法
要实现把长窄的(year, number)列重复排列成多组横向列的效果,可以通过分组标识+透视表的方式完成,具体步骤如下:
1. 构造示例数据(模拟你的原始DataFrame)
import pandas as pd import numpy as np # 生成1950-2017的年份序列 years = range(1950, 2018) # 随机生成对应number值(可替换为你的真实数据) numbers = np.random.randint(0, 300, size=len(years)) df = pd.DataFrame({'year': years, 'number': numbers})
2. 添加分组与位置标识
先设定每组包含的行数(比如示例中每组5行),给每行分配对应的组号和组内位置:
# 设定每组行数,可根据需求调整 group_size = 5 # 生成组号:每group_size行划分为一组 df['group'] = df.index // group_size # 生成组内位置索引(0到group_size-1) df['pos'] = df.index % group_size
3. 透视转换为多列结构
通过pivot方法将分组数据转为横向列,再调整列的顺序和命名:
# 透视表:以组内位置为行,组号为列,提取year和number值 pivoted = df.pivot(index='pos', columns='group', values=['year', 'number']) # 交换列层级,让同一组的year、number相邻 pivoted = pivoted.swaplevel(axis=1).sort_index(axis=1) # 重命名列,保持year/number重复的格式 pivoted.columns = [col[1] for col in pivoted.columns]
4. 处理末尾不足组的空值(可选)
如果总行数不是group_size的整数倍,末尾行会出现NaN,可替换为你需要的占位符(比如示例中的---):
# 将NaN替换为'---',注意此操作会将数值转为字符串类型 result = pivoted.fillna('---')
最终效果
运行上述代码后,result就是你需要的多组(year, number)列横向排列的表格结构,每行对应原数据中不同组的同位置行。
内容的提问来源于stack exchange,提问作者Tim O'Brien
相关产品推荐
相关产品推荐

