Pandas groupby 计数值 > 0

Pandas groupby counting values > 0

我有一个pandas df格式如下

MATERIAL    DATE         HIGH    LOW
AAA       2022-01-01     10      0
AAA       2022-01-02     0       0
AAA       2022-01-03     5       2
BBB       2022-01-01     0       0
BBB       2022-01-02     10      5
BBB       2022-01-03     8       4

我希望对其进行转换,以便得到以下结果

MATERIAL      HIGH_COUNT    LOW_COUNT 
AAA            2              1         
BBB            2              2         

基本上是 "HIGH_COUNT""LOW_COUNT" 我想计算该列大于 0 的出现次数,按 "MATERIAL" 分组。 我试过 df.groupby(['MATERIAL']).agg<xxx> 但我不确定要在此处使用 agg 函数。

编辑:

我用过

df.groupby(['MATERIAL']).agg({'HIGH':'count', 'LOW':'count}) 

但这甚至计算了 0 行。

您可以创建一个布尔数据帧和 groupby + sum:

out = df[['HIGH', 'LOW']].gt(0).groupby(df['MATERIAL']).sum().add_suffix('_COUNT').reset_index()

输出:

  MATERIAL  HIGH_COUNT  LOW_COUNT
0      AAA           2          1
1      BBB           2          2