使用Pandas对DataFrame进行分组与部分转置
解决方案
可以通过 pandas 的 groupby、melt 和 pivot 组合操作实现需求,具体步骤如下:
1. 构造示例数据
import pandas as pd df = pd.DataFrame({ 'Type': ['A', 'A', 'B', 'B'], 'Parameter 1': [1, 3, 2, 4], 'Parameter 2': [2, 10, 5, 8], 'Parameter 3': [4, 1, 9, 2] })
2. 为每组内的行添加序号
给同一 Type 下的行标记序号,用于后续转置时区分不同的 Value 列:
df['value_id'] = df.groupby('Type').cumcount() + 1
3. 转置参数列(宽表转长表)
用 melt 将 Parameter 1-3 列转为行,保留 Type 和序号信息:
melted_df = df.melt(id_vars=['Type', 'value_id'], var_name='Params', value_name='Value')
4. 转置回宽表得到目标结构
通过 pivot 将序号转为列,再重置索引并整理列名:
result_df = melted_df.pivot(index=['Type', 'Params'], columns='value_id', values='Value').reset_index() result_df.columns = ['Type', 'Params', 'Value 1', 'Value 2']
5. 处理Type列的重复显示
让同一 Type 仅在第一行显示,其余行留空:
result_df['Type'] = result_df['Type'].mask(result_df['Type'].duplicated(), '')
最终得到的结果与示例表格完全一致:
| Type | Params | Value 1 | Value 2 |
|---|---|---|---|
| A | Parameter 1 | 1 | 3 |
| Parameter 2 | 2 | 10 | |
| Parameter 3 | 4 | 1 | |
| B | Parameter 1 | 2 | 4 |
| Parameter 2 | 5 | 8 | |
| Parameter 3 | 9 | 2 |
内容的提问来源于stack exchange,提问作者qwap
相关产品推荐
相关产品推荐

