考虑到前一行的值,将函数应用于pandas数据框列

时间:2019-08-14 13:18:40

标签: python pandas

df:

375ma

NaN
NaN
NaN
NaN
123
124
168
189
190
200

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

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个值。

谢谢

1 个答案:

答案 0 :(得分:0)

IIUC,您需要在将参数raw设置为False以便在函数中传递一系列后,再使用rollingapply函数。

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