我有一个数据框,
df
,如下所示:
| | rating | foo1 | foo2 | foo3 | foo4 | foo5 |
|:--:|:------:|:-----:|:----:|:-----:|:----:|:-----:|
| 1 | 2 | 0 | 0 | 0.98 | 0 | 0.7 |
| 2 | 2 | 0 | 0 | 0 | 0.3 | 0.007 |
| 3 | 2 | 0 | 0 | 0 | 0 | 0 |
| 4 | 4 | 0.1 | 0.99 | 0 | 0 | 0.005 |
| 5 | 4 | 0 | 0 | 0 | 0 | 0.01 |
| 6 | 2 | 0 | 0 | 0.66 | 0 | 0.27 |
| 7 | 4 | 0 | 0.92 | 0.32 | 0 | 0.11 |
| 8 | 2 | 0.003 | 0 | 0.073 | 0 | 0.218 |
| 9 | 4 | 0 | 0 | 0 | 0 | 0.004 |
| 10 | 4 | 0 | 0 | 0 | 0 | 0.001 |
除了我有13000个特性,并且只关心某个子集(比如foo1、foo2、foo3、foo4和foo5)
我的形状
数据框
是:
2000 rows x 13984 columns
我需要做的是计算每列的非零个数,并按评级对其进行分组,以希望产生如下结果:
| | foo1 | foo2 | foo3 | foo4 | foo5 |
|:-:|:----:|:----:|:----:|:----:|:----:|
| 2 | 1 | 0 | 3 | 1 | 4 |
| 4 | 1 | 2 | 1 | 0 | 5 |
我知道在SQL中,我可以做如下事情:
SELECT
rating,
SUM(CASE WHEN foo1 != 0 THEN 1 ELSE 0 END) as foo1,
SUM(CASE WHEN foo2 != 0 THEN 1 ELSE 0 END) as foo2,
SUM(CASE WHEN foo3 != 0 THEN 1 ELSE 0 END) as foo3,
SUM(CASE WHEN foo4 != 0 THEN 1 ELSE 0 END) as foo4,
SUM(CASE WHEN foo5 != 0 THEN 1 ELSE 0 END) as foo5
FROM
df
GROUP BY
rating
我发现了
this Stack Overflow post
但这是如何为
所有列
,我只关心具体的五个(
foo1
我是说,
foo2
,请
foo3
,请
foo4
我是说,
foo5
)
如何使用python pandas编写解决方案以获得所需的结果?