首页 > 解决方案 > 考虑前行的值,将函数应用于 pandas 数据框列

问题描述

df:

375ma

NaN
NaN
NaN
NaN
123
124
168
189
190
200

如何使用以下函数获取每个 20/xx 条目的值375ma

def trendline(data, order=1):
    coeffs = np.polyfit(data.index.values, list(data), order)
    slope = coeffs[-2]
    return float(slope)

如果我做:

df['trend'] = trendline(df['375ma'][-5:])

我在所有行中都得到相同的值。

我可能可以使用for循环来做到这一点,有没有不同的方法来做到这一点?

编辑:

这样[-5:]函数可以查看 375ma 列中前面的 5 个值。

谢谢

标签: pythonpandas

解决方案


IIUC,您需要使用rollingapply您的函数之后,将参数raw设置为False在函数中传递一系列,例如:

df['trend'] = df['375ma'].rolling(5).apply(trendline, raw=False)

print (df)
   375ma  trend
0    NaN    NaN
1    NaN    NaN
2    NaN    NaN
3    NaN    NaN
4  123.0    NaN
5  124.0    NaN
6  168.0    NaN
7  189.0    NaN
8  190.0   19.9
9  200.0   17.4

推荐阅读