pandas:按条件计算行数

7 投票
1 回答
12883 浏览
提问于 2025-04-18 06:35

我有一个数据表,里面的列是月份,行是不同的部门。

                2013April  2013May  2013June
        Dep1        0         10        15
        Dep2        10        15        20

我想加一列,统计每个部门有多少个月的值大于0。比如:

                2013April  2013May  2013June  Count>0 
        Dep1        0         10        15       2
        Dep2        10        15        20       3

这个函数需要处理的列数是变化的。我觉得定义一个函数然后用 .apply 方法可以解决这个问题,但我现在还搞不明白怎么做。

1 个回答

17

首先,选择你想要的列,cols

df[cols].apply(lambda s: (s > 0).sum(), axis=1)

这里利用了一个特点,在python中,True代表1,而False代表0

其实,还有更好的方法:

(df[cols] > 0).sum(1)

因为这个方法利用了numpy的向量化功能。

%timeit df.apply(lambda s: (s > 0).sum(), axis=1)
10 loops, best of 3: 141 ms per loop

%timeit (df > 0).sum(1)
1000 loops, best of 3: 319 µs per loop

撰写回答