将行值设置为列并根据另一列的行值填充它

set row's value become column and fill it based on other column's row's value

我有一个这样的数据框:

id  category    year    freq
101 1           2020    1
101 1           2021    1
202 2           2020    2
202 2           2021    6
203 3           2021    2

我需要根据 id、类别和年份值转换数据框,并用年份的频率填充年份值。期望的输出是:

id  category    2020    2021
101 1           1       1
202 2           2       6
203 3           0       2

我试过使用一种热编码,但我无法用频率填充每一年的列。

似乎是 df.pivot_table 的工作。请注意,我们将使用 fill_value=0 将缺失值替换为 0(以匹配您的预期输出):

>>> df.pivot_table(values="freq", index=["id", "category"], columns="year", fill_value=0)
year          2020  2021
id  category            
101 1            1     1
202 2            2     6
203 3            0     2