Pandas 根据每行出现的次数将行转换为列

Pandas pivot rows into columns with count of occurence per row

我有以下数据框,其中一列代表 ID(一个相同的 ID 可以在该列中多次出现),另一列代表该 ID 的某个类别的出现。每个类别每个 ID 可以出现多次。

    id    category 
    1234  happy     
    4567  sad     
    8910  medium     
    ...............
    1234  happy 
    4567  medium

我想旋转这个 table 以获得以下内容

 id    happy   sad   medium
 1234  2       0     0
 4567  0       1     1
 8910  0       0     1
       

我尝试了以下方法

df.pivot_table(index= "id", columns = "category", aggfunc= 'count', fill_value = 0)

但它只返回 ID 作为索引。

有人能帮忙吗?

您可以使用 pd.crosstab:

print (pd.crosstab(df["id"], df["category"]))

如果您想坚持使用 pivot_table,您需要添加一个额外的列作为值:

print (df.assign(value=0).pivot_table(index="id", columns="category", values="value", aggfunc='count', fill_value=0))

category  happy  medium  sad
id                          
1234          2       0    0
4567          0       1    1
8910          0       1    0