2015-02-13 1 views
3

УчитываяВ пандах, как рассчитать «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]) 

Допустим, вы хотите, чтобы вычислить число наблюдений < 0 в колонке C в течение последних 3-х наблюдений на скользящей основе. В Excel вы скользили расчет «СЧЕТЕСЛИ» в течение заданного окна с условием и желаемый результат будет:

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 

Как я могу это сделать эффективным (вещий) способом с использованием панды?

Благодаря

ответ

3

Вы можете использовать rolling_sum на колонке BOOLS:

>>> 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 

Это работает, потому что Истинная ~ 1 и ложных ~ 0, и мы имеем

>>> A["C"] < 0 
1  True 
2  True 
3  True 
4 False 
5 False 
Name: C, dtype: bool 
Смежные вопросы