计算符合条件

时间:2016-01-02 10:34:12

标签: python pandas

根据DateClose列中的数据,我想计算ConsecPeriodsUp列中的值。此列显示Close值增加的连续两周时段的数量。

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列,但我无法看到如何汇总该列以获取ConsecPeriodsUp列,或者是否有办法在我错过的单一计算中完成。

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)

1 个答案:

答案 0 :(得分:0)

这可以通过调整Pandas Cookbook Grouping like Python’s itertools.groupby中描述的groupbyshiftcumsum技巧来完成。主要的变化是除以句点的长度 - 1,然后使用ceil函数向上舍入到下一个整数。

from math import ceil
...

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

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