pandas:按条件计算行数
我有一个数据表,里面的列是月份,行是不同的部门。
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