Python中为拼接自多组np.array的DataFrame设置分组表头
实现方案
首先需要明确三个原始NumPy数组各自的列数(记为col1、col2、col3),确保三者之和等于75000。根据你需要的表头样式,分两种场景实现:
场景1:普通分组列名(前缀区分)
如果只是需要给不同来源的列加上分组前缀,直接拼接时指定列名即可:
import pandas as pd import numpy as np # 替换为你的实际数组和列数 col1, col2, col3 = 25000, 25000, 25000 arr1 = np.random.rand(12, col1) # 第一个原始数组 arr2 = np.random.rand(12, col2) # 第二个原始数组 arr3 = np.random.rand(12, col3) # 第三个原始数组 # 生成各分组的列名列表 group1_cols = [f'Group1_col{i}' for i in range(col1)] group2_cols = [f'Group2_col{i}' for i in range(col2)] group3_cols = [f'Group3_col{i}' for i in range(col3)] # 拼接数组并设置列名 df = pd.DataFrame( np.hstack([arr1, arr2, arr3]), columns=group1_cols + group2_cols + group3_cols )
如果已经有拼接好的无表头DataFrame,直接修改列名:
# 假设df_raw是已有的(12,75000)无表头DataFrame df_raw.columns = group1_cols + group2_cols + group3_cols
场景2:多级分组表头(大标题套小标题,对应附图样式)
如果需要类似分组折叠的多级表头,使用pd.MultiIndex创建层级列名:
# 生成多级列名元组列表 multi_col_tuples = ( [('Group1', f'Col{i}') for i in range(col1)] + [('Group2', f'Col{i}') for i in range(col2)] + [('Group3', f'Col{i}') for i in range(col3)] ) multi_cols = pd.MultiIndex.from_tuples(multi_col_tuples) # 生成带多级表头的DataFrame df_multi = pd.DataFrame( np.hstack([arr1, arr2, arr3]), columns=multi_cols )
对已有DataFrame修改为多级表头:
df_raw.columns = multi_cols
关键注意事项
- 必须保证
col1 + col2 + col3 = 75000,否则会出现列数不匹配的报错 - 可以根据需求自定义分组名称(比如把
Group1换成业务相关的名称)和列名后缀
内容的提问来源于stack exchange,提问作者Malahat Mehraban
相关产品推荐
相关产品推荐

