如何将宽格式DataFrame转换为含Indicator与Value列的结构?
解决方案
用pandas内置的melt()方法可以高效完成这种宽表转长表的格式转换,比手动写for循环更简洁且不易出错,具体步骤如下:
1. 构造原始DataFrame
import pandas as pd # 按你的数据构造原始DataFrame data = { 'Column A': [1, 2, 3], 'Column B': ['value 1', 'value 4', 'value 7'], 'Column C': ['value 2', 'value 5', 'value 8'], 'Column D': ['value 3', 'value 6', 'value 9'] } df = pd.DataFrame(data)
2. 使用melt()转换格式
melt()方法可以指定保留的标识符列,将其余列转换为"指标-值"的配对结构:
# 执行格式转换 melted_df = df.melt( id_vars='Column A', # 保留作为分组标识的列 value_vars=['Column B', 'Column C', 'Column D'], # 需要转换的列 var_name='Indicator', # 新的指标列名称 value_name='Value' # 新的值列名称 ) # 将原始列名替换为目标描述文字 indicator_map = { 'Column B': 'descriptionB', 'Column C': 'descriptionC', 'Column D': 'descriptionD' } melted_df['Indicator'] = melted_df['Indicator'].map(indicator_map)
3. 最终结果
执行后得到的melted_df即为你需要的格式:
| Column A | Indicator | Value |
|---|---|---|
| 1 | descriptionB | value 1 |
| 2 | descriptionB | value 4 |
| 3 | descriptionB | value 7 |
| 1 | descriptionC | value 2 |
| 2 | descriptionC | value 5 |
| 3 | descriptionC | value 8 |
| 1 | descriptionD | value 3 |
| 2 | descriptionD | value 6 |
| 3 | descriptionD | value 9 |
(注:你提供的示例中存在拼写错误descirptionB,这里统一使用正确的descriptionB)
内容的提问来源于stack exchange,提问作者Elena Iurco
相关产品推荐
相关产品推荐

