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
列中。输入仅为日期
和关闭
。