[英]Applying custom function with rolling window row-wise in pandas
我有一个函数,希望将其应用于数据框的行向下并输出带有结果的新新列。 通常,使用lambda
函数或.map()
会很简单,但是我被卡住了,因为该函数要求使用窗口滚动min / max,而lambda显然只会看到该行。
这是函数:
def divergence(series_1, series_2, local_window = 5, reference_window = 15):
min_1_local = series_1.rolling(local_window).min().iloc[-1]
min_1_reference = series_1.rolling(reference_window).min().iloc[-1]
min_2_local = series_1.rolling(local_window).min().iloc[-1]
min_2_reference = series_1.rolling(reference_window).min().iloc[-1]
max_1_local = series_1.rolling(local_window).max().iloc[-1]
max_1_reference = series_1.rolling(reference_window).max().iloc[-1]
max_2_local = series_1.rolling(local_window).max().iloc[-1]
max_2_reference = series_1.rolling(reference_window).max().iloc[-1]
if ( (min_1_local < min_1_reference)
& (min_2_local > min_2_reference)
& (series_2.iloc[-1] > series_2.iloc[-2]) ):
return 1
elif ( (max_1_local > max_1_reference)
& (max_2_local < max_2_reference)
& (series_2.iloc[-1] < series_2.iloc[-2]) ):
return -1
else:
return 0
这是我的数据:
Measure1 Measure2
Date
2018-09-18 05:00:00 1912.345679 -28.291456
2018-09-18 06:00:00 1910.802469 -28.351495
2018-09-18 07:00:00 1916.666667 -27.988846
2018-09-18 08:00:00 1907.253086 -28.039686
2018-09-18 09:00:00 1907.098765 -28.091198
有任何想法吗?
您是否尝试过熊猫滚动功能 ?
df = pd.DataFrame(np.random.rand(50,2), columns=['input1', 'input2'])
df['min'] = df['input1'].rolling(5).min()
df['min_shifted'] = df['input1'].rolling(5).min().shift(-5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.