python – 在pandas中如何在移动窗口的基础上计算’Countif’?

特定

A = pd.DataFrame([[1, 5, -2], [2, 4, -4], [3, 3, -1], [4, 2, 2], [5, 1, 4]],
             columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5])

假设您想要计算观察次数<在滚动的基础上,在最后3个观察中,C列为0.在excel中,您可以使用条件在指定窗口上滑动'countif'计算,并且所需的结果将是:

D = # of x < 0 on a rolling window basis of size 3

A
Out[79]: 
   A  B  C  D
1  1  5 -2  
2  2  4 -4
3  3  3 -1  3
4  4  2  2  2
5  5  1  4  1

如何使用Pandas以高效(Pythonic)的方式完成此操作?

谢谢

解决方法:

您可以在bool列上使用rolling_sum

>>> A["D"] = pd.rolling_sum((A["C"] < 0), 3)
>>> A
   A  B  C   D
1  1  5 -2 NaN
2  2  4 -4 NaN
3  3  3 -1   3
4  4  2  2   2
5  5  1  4   1

这是因为True~1和False~0,我们有

>>> A["C"] < 0
1     True
2     True
3     True
4    False
5    False
Name: C, dtype: bool

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...