将含重复列的Pandas DataFrame拆分为多个独立DataFrame
拆分含重复列结构的Pandas DataFrame
问题场景
给定如下结构的DataFrame,包含多组并排的重复列(本例是2组item#、name、value、price结构,扩展到4-5组逻辑一致):
item# name value price item# name value price 1 testname testvalue 12 5 testname5 testvalue5 12 2 testname testvalue 12 7 testname7 testvalue7 21 3 testname testvalue 12 9 testname9 testvalue9 4
通用拆分方法
核心思路是按固定列数分组切片——因为每组的列结构重复且列数固定,步骤如下:
- 明确单组的列数:比如本例中每组是4列(
item#、name、value、price),记为group_size = 4。 - 计算总组数:用DataFrame的总列数除以单组列数,
num_groups = df.shape[1] // group_size。 - 循环拆分,同时统一列名(避免原重复列名造成的混乱)。
代码实现
1. 构造示例DataFrame
import pandas as pd # 构造示例数据 data = [ [1, "testname", "testvalue", 12, 5, "testname5", "testvalue5", 12], [2, "testname", "testvalue", 12, 7, "testname7", "testvalue7", 21], [3, "testname", "testvalue", 12, 9, "testname9", "testvalue9", 4] ] # 原重复列名 columns = ["item#", "name", "value", "price", "item#", "name", "value", "price"] df = pd.DataFrame(data, columns=columns)
2. 通用拆分逻辑
# 定义单组列数 group_size = 4 # 拆分后统一使用的列名 standard_columns = ["item#", "name", "value", "price"] # 计算总组数 num_groups = df.shape[1] // group_size # 存储拆分后的所有DataFrame split_dfs = [] for i in range(num_groups): # 计算当前组的列索引范围 start_col = i * group_size end_col = start_col + group_size # 切片提取当前组数据 group_df = df.iloc[:, start_col:end_col] # 重命名列 group_df.columns = standard_columns # 添加到结果列表 split_dfs.append(group_df)
3. 验证结果
拆分后split_dfs列表中的每个元素都是独立的DataFrame:
split_dfs[0]对应第一组数据:
item# name value price 0 1 testname testvalue 12 1 2 testname testvalue 12 2 3 testname testvalue 12
split_dfs[1]对应第二组数据:
item# name value price 0 5 testname5 testvalue5 12 1 7 testname7 testvalue7 21 2 9 testname9 testvalue9 4
扩展到多组情况
如果是4-5组重复结构,只需保持group_size为单组列数(比如还是4列),代码逻辑完全无需修改——程序会自动根据总列数计算组数并完成拆分。
内容的提问来源于stack exchange,提问作者dekt
相关产品推荐
相关产品推荐

