我面临以下问题: 我需要根据高度和距离计算两点之间的斜率。
我使用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”?