多列滚动窗口

时间:2019-07-23 15:12:07

标签: python pandas numpy

我面临以下问题: 我需要根据高度和距离计算两点之间的斜率。

我使用50的滚动窗口,其中center = True。因此,对于某行,基于-25个索引和+25个索引来计算斜率。因此,例如,如果在-25(StartIndex)处的高度为80,在+25(EndIndex)处的高度为90,并且每一行代表10米,则坡度将为:(90-80)/ 500 = 0.02

但是,在-25和+25处的高度可以是NaN值。如果NaN值为-25,则StartIndex将变为-24(如果也是NaN,则StartIndex将变为-23等)。 EndIndex也是如此。

现在,我创建了以下函数并将其应用于滚动窗口。但是,只有高度从滚动窗口返回。

因此,我想知道如何在滚动窗口之后返回两列,以便使用.apply(calculate_slope)进行一些计算。

我创建了此函数并应用了它。

def calculate_slope(df):
    df = df[df['Height'].notna()]

    StartIndex, EndIndex = df.iloc[0]['Height'], df.iloc[-1]['Height']
    first_KM, last_KM = df.iloc[0]['KM'], df.iloc[-1]['KM'] 

    slope = (EndIndex - StartIndex)/(last_KM - first_KM)  

    return slope
def get_slope(df, window_size=50):
    return df.assign(
        slope = lambda d: (d[['Height','KM']]
                             .rolling(window=window_size, center=True, min_periods=1)
                             .apply(calculate_slope, raw=False)
                            )
    )

这是示例数据框。

    KM        Height
0   0.25      NaN
1   0.5       2.0
2   0.75      3.0
3   1.0       NaN
4   1.25      5.0
5   1.5       6.0
6   1.75      7.0
7   2.0       8.0
8   2.25      NaN

因此,如果我们将window_size设置为5,则df.iloc [4]的预期结果应为:

斜率=(7-3)/(1.75-0.75)= 4.0 df.iloc[-1]['Height']为7 3是df.iloc[0]['Height'] 1.75是df.iloc[-1]['KM'] 和0.75 df.iloc[0]['Height']

但是,由于滚动窗口之后的数据框不知道'Height',我立即收到了错误

KeyError: 'Height'

那么在应用后如何获得滚动后的“高度”和“ KM”?

0 个答案:

没有答案