我有以下 excel 数据集:
($/bbl) ($/bbl) ($/bbl)
crude_petro crude_brent crude_dubai
1960M01 1.63 1.63 1.63
1960M02 1.63 1.63 1.63
1960M03 1.63 1.63 1.63
我想做的是转换行名crude_petro, crude_brent, crude_dubai
成列,格式如下:
编辑 2
unit commodity price date
0 ($/bbl) crude_petro 1.63 1960M01
1 ($/bbl) crude_brent 1.63 1960M01
2 ($/bbl) crude_dubai 1.63 1960M01
如何使用 Pandas 实现这一点?
编辑: 这就是我阅读 excel 以可能解析这些值的方式
df = pd.read_excel(local_path, sheet_name='Monthly Prices', engine='openpyxl', skiprows=5, usecols="B:BT")
编辑 3: 在我的最后一列中,数据正在生成与 NaN 值相关联的电子表格(源)中不存在的额外列。例如商品SILVER输出'SILVER.1'、'SILVER.2'等
答案 0 :(得分:1)
尝试使用 melt
+ sort_index
:
new_df = (
df.melt(ignore_index=False, var_name=['unit', 'commodity'])
.sort_index()
.rename_axis('Date')
.reset_index()
)
new_df
:
Date unit commodity value
0 1960M01 ($/bbl) crude_petro 1.63
1 1960M01 ($/bbl) crude_brent 1.63
2 1960M01 ($/bbl) crude_dubai 1.63
3 1960M02 ($/bbl) crude_petro 1.63
4 1960M02 ($/bbl) crude_brent 1.63
5 1960M02 ($/bbl) crude_dubai 1.63
6 1960M03 ($/bbl) crude_petro 1.63
7 1960M03 ($/bbl) crude_brent 1.63
8 1960M03 ($/bbl) crude_dubai 1.63
使用的样本帧:
df = pd.DataFrame({
('($/bbl)', 'crude_petro'): {'1960M01': 1.63, '1960M02': 1.63,
'1960M03': 1.63},
('($/bbl)', 'crude_brent'): {'1960M01': 1.63, '1960M02': 1.63,
'1960M03': 1.63},
('($/bbl)', 'crude_dubai'): {'1960M01': 1.63, '1960M02': 1.63,
'1960M03': 1.63}
})
df
:
($/bbl)
crude_petro crude_brent crude_dubai
1960M01 1.63 1.63 1.63
1960M02 1.63 1.63 1.63
1960M03 1.63 1.63 1.63