如何用Python将分组列拆分为多列并保留对应列值?
Python实现分组列拆分与多列映射填充
针对你需要的分组列拆分、多列填充需求,用Python的pandas库可以轻松实现,下面是详细步骤和代码:
1. 导入库并准备数据
首先导入pandas,然后将输入数据转换为DataFrame(实际使用时可直接用pd.read_csv()读取本地文件):
import pandas as pd # 模拟输入数据(替换成你的实际数据读取逻辑) data = { 'Column1': ['Group1']*4 + ['Group2']*4 + ['Group3']*2, 'Column2': ['Value1','Value2','Value3','Value4']*2 + ['Value1','Value2'], 'Column3': ['V1','V2','V3','V4','x1','x2','x3','x4','y1','y2'] } df = pd.DataFrame(data)
2. 生成分组内的行对齐标识
为了让不同分组的同位置数据(比如每个Group的Value1)放在同一行,给每个分组内的行添加序号:
# 给每个分组内的行从0开始计数,用于后续对齐 df['row_id'] = df.groupby('Column1').cumcount()
groupby('Column1'):按Column1的分组(Group1/Group2/Group3)拆分数据cumcount():给每个分组内的行生成连续序号,保证同位置数据的序号一致
3. 拆分Column2为分组列
使用pivot函数重塑数据,将分组名转为列名,填充对应Column2的值:
# 按row_id对齐,将Column1的分组转为列,填充Column2的值 df_col2 = df.pivot(index='row_id', columns='Column1', values='Column2').reset_index(drop=True)
pivot(index='row_id', columns='Column1', values='Column2'):以row_id为行标识,Column1的分组为列,Column2的值为填充内容reset_index(drop=True):移除多余的row_id索引,得到干净的分组列
4. 拆分Column3为带前缀的分组列
同样用pivot处理Column3,然后给列名添加Column3.前缀:
# 处理Column3并添加前缀 df_col3 = df.pivot(index='row_id', columns='Column1', values='Column3').reset_index(drop=True) df_col3.columns = [f'Column3.{col}' for col in df_col3.columns]
- 列表推导式
[f'Column3.{col}' ...]:给每个分组列名添加前缀,生成Column3.Group1这类列名
5. 合并结果并调整格式
将处理好的两部分数据按列合并,可按需调整字符串大小写:
# 按列合并两个结果DataFrame final_df = pd.concat([df_col2, df_col3], axis=1) # 可选:将字符串转为小写(匹配你期望的输出格式) final_df = final_df.applymap(lambda x: x.lower() if isinstance(x, str) else x)
6. 查看最终结果
输出不带索引的结果,格式与你期望的一致:
print(final_df.to_string(index=False))
关键说明
- 无论实际数据有多少个分组,代码无需修改,pandas会自动识别所有分组并生成对应列
- 缺失的内容会自动填充为
NaN,符合你的输出要求
内容的提问来源于stack exchange,提问作者Sri Vidhya
相关产品推荐
相关产品推荐

