我只是用一个扁平的数据框做这个,但是面板也是一样的。你可以用两种方法之一。第一种方法是您所做的,只需将count()更改为sum():( df > 0 ).sum(axis=1)
底层结构是布尔型的,True和False都被计算在内,而如果对它们求和,它的解释就更像您所期望的那样(0/1)。
但更标准的做法是:df[ df > 0 ].count(axis=1)
前一种方法基于布尔值的数据框架,后一种方法如下:df[ df > 0 ]
a b c d e f g h i j
0 1 NaN NaN NaN NaN NaN NaN NaN 1 NaN
1 NaN 1 NaN NaN NaN 1 NaN NaN NaN NaN
2 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
4 NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN
在这种情况下,你使用哪种方法并不重要,但一般来说,后者会更好,因为你可以用它做更多的事情。例如,对于前一种方法(按设计有二进制结果),您真正能做的就是计数,但是在后一种方法中,您可以计数、求和、乘法等
对于有两个以上可能值的df != 0来说,这种方法的潜在有用性可能更为明显:df[ df != 0 ]
a b c d e f g h i j
0 1 NaN NaN -1 NaN NaN -1 NaN 1 NaN
1 NaN 1 NaN NaN NaN 1 NaN NaN NaN -1
2 1 NaN NaN NaN NaN -1 NaN NaN NaN NaN
3 NaN -1 NaN NaN NaN NaN NaN 1 NaN NaN
4 NaN NaN NaN 1 NaN NaN -1 NaN NaN -1