根据Date
和Close
列中的数据,我想计算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)
答案 0 :(得分:0)
这可以通过调整Pandas Cookbook Grouping like Python’s itertools.groupby中描述的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)