Python 计算与条件匹配的连续时段数

Python 计算与条件匹配的连续时段数,python,pandas,Python,Pandas,给定Date和Close列中的数据,我想计算conceripiodsup列中的值。此列给出了关闭值增加的连续两周周期数 Date Close UpThisPeriod ConsecPeriodsUp 23/12/2015 3 1 1 16/12/2015 2 0 0 09/12/2015 1 0

给定
Date
Close
列中的数据,我想计算
conceripiodsup
列中的值。此列给出了
关闭
值增加的连续两周周期数

Date        Close       UpThisPeriod    ConsecPeriodsUp                 
23/12/2015  3           1               1
16/12/2015  2           0               0
09/12/2015  1           0               0
02/12/2015  3           1               1
25/11/2015  2           0               0
18/11/2015  1           0               0
11/11/2015  7           1               3
04/11/2015  6           1               3
28/10/2015  5           1               2
21/10/2015  4           1               2
14/10/2015  3           1               1
07/10/2015  2           NaN             NaN
30/09/2015  1           NaN             NaN
我编写了以下代码来给出
UpThisPeriod
列,但我看不出如何将其聚合以获得
ConcerPeriodSup
列,或者是否有一种方法可以在单个计算中完成我缺少的操作

import pandas as pd


def up_over_period(s):
    return s[0] >= s[-1]


df = pd.read_csv("test_data.csv")

period = 3  # one more than the number of weeks

df['UpThisPeriod'] = pd.rolling_apply(
    df['Close'], 
    window=period, 
    func=up_over_period, 
    ).shift(-period + 1)

这可以通过调整熊猫食谱中描述的
groupby
shift
cumsum
技巧来实现。主要的变化是除以周期的长度-1,然后使用
ceil
函数向上取整到下一个整数

from math import ceil
...

s = df['UpThisPeriod'][::-1]

df['ConsecPeriodsUp'] = (s.groupby((s != s.shift()).cumsum()).cumsum() / (period - 1)).apply(ceil)

您希望得到什么输出?预期的输出在
concerperiodsup
列中。输入仅为
日期
关闭