【问题标题】:Applying custom function with rolling window row-wise in pandas在熊猫中逐行应用具有滚动窗口的自定义函数
【发布时间】:2018-09-18 19:42:18
【问题描述】:

我有一个函数,我想在数据帧中逐行应用并输出一个带有结果的新列。通常这对于lambda 函数或.map() 来说很简单,但我被卡住了,因为该函数需要一个带有窗口的滚动最小值/最大值,而 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

有什么想法吗?

【问题讨论】:

  • 您能否更详细地描述您的预期逻辑,并根据您的示例数据提供预期的输出?

标签: python pandas lambda pandas-apply


【解决方案1】:

你试过熊猫rolling function吗?

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 2019-09-11
    • 1970-01-01
    • 2017-03-30
    • 2018-02-09
    • 2020-09-18
    • 2023-04-09
    • 2020-04-21
    相关资源
    最近更新 更多