计算 SQL 或 Pandas 中 GROUP BY 后的类别数

gfo*_*e91 5 sql oracle pivot group-by pandas

我有一个数据框 df :

ORDERID    PRODUCTTYPE  PRODUCTID  PRODUCT
123         Fruits         2       Banana
123         Vegetables     3       Tomato
123         Vegetables     3       Onion
321         Fruits         2       Grapes
321         Fruits         2       Avocado
Run Code Online (Sandbox Code Playgroud)

我需要输出为

ORDERID  FRUITS  VEGETABLES
123       1          2
321       2          0

Run Code Online (Sandbox Code Playgroud)

我需要对 groupby 进行任何修改吗?我正在做

df.groupby('ORDERID'['PRODUCTTYPE'].nunique().reset_index(name="count")

Run Code Online (Sandbox Code Playgroud)

但这只是计算类别的数量

Qua*_*ang 4

groupby().value_counts()和的组合unstack()

(df.groupby('ORDERID')['PRODUCTTYPE']
   .value_counts()
   .unstack('PRODUCTTYPE', fill_value=0)
)
Run Code Online (Sandbox Code Playgroud)

或者pivot_table

df.pivot_table(index='ORDERID', 
               columns='PRODUCTTYPE', 
               values='PRODUCTID', 
               aggfunc='count',
               fill_value=0)
Run Code Online (Sandbox Code Playgroud)

输出:

PRODUCTTYPE  Fruits  Vegetables
ORDERID                        
123               1           2
321               2           0
Run Code Online (Sandbox Code Playgroud)