鉴于
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)方式执行此操作?
由于
答案 0 :(得分:4)
您可以在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