Python中如何转置数据集并保留首列statinfo作为ID列
解决方案
你需要的是宽表转长表操作,无需使用transpose全量转置,pandas内置的melt方法可以直接匹配你的需求,实现步骤如下:
- 先确认你已经将原始数据读取为DataFrame对象,命名为
df,结构和你给出的示例一致。 - 执行核心转换代码:
import pandas as pd # 如果你还没有生成原始df,可以用以下测试代码构造和你示例一致的数据集 data = { "statinfo": ["AVG,NAC,ALL", "AVG,NAC,AUD"], "2021M08": [121.55, 1.6118], "2021M07": [122.32, 1.5926], "2021M06": [122.83, 1.5761], "2021M05": [123.01, 1.5653], "2021M04": [123.1, 1.5544] } df = pd.DataFrame(data) # 转换核心逻辑 result_df = pd.melt( frame = df, id_vars = "statinfo", # 指定固定保留不需要转置的列 var_name = "Date", # 原日期表头转成新列后的列名 value_name = "Rate" # 原单元格数值转成新列后的列名 )
- 转换后得到的
result_df就是你需要的三列长表,输出样例如下:
| statinfo | Date | Rate |
|---|---|---|
| AVG,NAC,ALL | 2021M08 | 121.55 |
| AVG,NAC,AUD | 2021M08 | 1.6118 |
| AVG,NAC,ALL | 2021M07 | 122.32 |
| AVG,NAC,AUD | 2021M07 | 1.5926 |
| AVG,NAC,ALL | 2021M06 | 122.83 |
| AVG,NAC,AUD | 2021M06 | 1.5761 |
| ... | ... | ... |
如果需要对结果排序,可以额外执行排序代码:result_df = result_df.sort_values(by=["statinfo", "Date"]).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Juan Leon
相关产品推荐
相关产品推荐

