我有一个数据框架,它的结构是这样的(类似于数据透视表):
<表类>
B
2022年12月2023年1月 tbody><<tr>A1 B1 100 200 A1B2 101 201 表类>
您应该使用pd.melt
:
>>> df.melt(id_vars=['A', 'B'], var_name='Month', value_name='Value')
A B Month Value
0 A1 B1 December 2022 100
1 A1 B2 December 2022 101
2 A1 B1 January 2023 200
3 A1 B2 January 2023 201
然后重新排序列,您可以使用这个hack:
>>> df.melt(id_vars=['A', 'B'], var_name='Month', value_name='Value')
.set_index('Month').reset_index()
Month A B Value
0 December 2022 A1 B1 100
1 December 2022 A1 B2 101
2 January 2023 A1 B1 200
3 January 2023 A1 B2 201
根据@sammywemmy的评论:
var_cols = ['A', 'B']
out = df.melt(id_vars=var_cols, var_name='Month', value_name='Value')
[['Month'] + var_cols + ['Value']]
print(out)
# Output
Month A B Value
0 December 2022 A1 B1 100
1 December 2022 A1 B2 101
2 January 2023 A1 B1 200
3 January 2023 A1 B2 201