Python 3.6中如何将多组DataFrame数据上下堆叠并插入表头行?
解决DataFrame按列分组拼接并自定义展示格式的问题
嘿,我来帮你搞定这个DataFrame的展示需求!先理清楚你的场景:你有一个名为Tmp的DataFrame,数据是这样的:
import pandas as pd data = { 'A1': [17.387, 17.680, 17.787], 'A2': [17.470, 17.896, 17.228], 'B1': [19.93, 21.85, 24.46], 'B2': [13.29, 14.57, 16.30], 'C1': [19.93, 21.86, 24.45], 'C2': [19.93, 21.86, 24.45] } Tmp = pd.DataFrame(data)
你想要把每一组(A1&A2、B1&B2、C1&C2)单独展示,每组先显示自己的表头,再跟上对应的数据行,而且不要重复的索引。之前用pd.concat和append没成功,是因为没处理「插入表头行」和「按前缀分组」这两个关键点,试试下面的方案:
解决方案代码
# 获取所有列的前缀(A、B、C),确保按顺序排列 prefixes = sorted({col[0] for col in Tmp.columns}) # 准备一个列表来存储每个分组的结果块 result_blocks = [] for prefix in prefixes: # 提取当前前缀对应的两列 group_cols = [f"{prefix}1", f"{prefix}2"] group_data = Tmp[group_cols] # 创建表头行:把列名转成一行数据,结构和数据行一致 header_row = pd.DataFrame([group_cols], columns=group_cols) # 把表头行和数据行拼接,忽略原有索引 group_block = pd.concat([header_row, group_data], ignore_index=True) result_blocks.append(group_block) # 把所有分组块拼接成最终结果,重置索引得到连续序号 final_output = pd.concat(result_blocks, ignore_index=True) print(final_output)
代码说明
- 提取前缀:通过列名的第一个字符获取所有分组前缀(A、B、C),用
sorted保证顺序和你预期一致; - 构建分组块:对每个前缀,先取出对应的两列数据,然后把列名转换成一行作为表头,再和数据行拼接;
- 合并所有块:把每个分组的表头+数据块拼接起来,重置索引后就得到你想要的连续序号格式。
运行这段代码后,输出结果就和你期望的完全一致啦!
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

