我有一个数据框架,我想配置它的方式,年是水平的,Ex1, Ex2是垂直的,但同时保持ID值也垂直和一致。我试过用熊猫的转置函数,但它不能完成任务。
这是原始的数据帧:
ID Year Ex1 Ex2
0 1 2021 315 35
1 1 2022 233 23
2 1 2023 566 5766
3 2 2024 754 7554
4 2 2025 334 3334
5 2 2021 543 5443
6 3 2022 678 6728
7 3 2023 65 645
8 3 2024 456 4556
9 3 2025 53 563
,这是需要的结果:
ID Ex 2021 2022 2023 2024 2025
0 1 Ex1 315 233 566
1 1 Ex2 35 23 5766
2 2 Ex1 543 754 334
3 2 Ex2 5443 7554 3334
4 3 Ex1 678 65 456 53
5 3 Ex2 6728 645 4556 563
您也可以使用stack
和unstack
:
print (df.set_index(["ID","Year"]).stack().unstack("Year", fill_value=""))
Year 2021 2022 2023 2024 2025
ID
1 Ex1 315 233 566
Ex2 35 23 5766
2 Ex1 543 754 334
Ex2 5443 7554 3334
3 Ex1 678 65 456 53
Ex2 6728 645 4556 563
您可以melt
和pivot
(或pivot_table
):
(df.melt(id_vars=['ID', 'Year'], var_name='Ex')
.pivot_table(index=['ID', 'Ex'], columns='Year', values='value', fill_value='')
.reset_index()
.rename_axis(None, axis=1)
)
输出:
ID Ex 2021 2022 2023 2024 2025
0 1 Ex1 315.0 233.0 566.0
1 1 Ex2 35.0 23.0 5766.0
2 2 Ex1 543.0 754.0 334.0
3 2 Ex2 5443.0 7554.0 3334.0
4 3 Ex1 678.0 65.0 456.0 53.0
5 3 Ex2 6728.0 645.0 4556.0 563.0