我有这个数据集:
Date Stock Peak Trough
2002-01-01 33.78 False True
2002-01-02 34.19 False False
2002-01-03 35.44 False False
2002-01-04 36.75 True False
我的目标是添加一个新列“功能”,其中所有x先前的股票价格都将导致每行中的当前价格。假设x = 3,则如下所示:
Date Stock Peak Trough Feature
2002-01-01 33.78 False True [NaN, NaN, 33.78]
2002-01-02 34.19 False False [NaN, 33.78, 34.19]
2002-01-03 35.44 False False [33.78, 34.19, 35.44]
2002-01-04 36.75 True False [34.19, 35.44, 36.75]
因此,新列“功能”应为一个数组,该数组中的最后一个值应始终为该行中股票的相应价格。
我尝试使用shift(),但是我不知道如何将所有x个先前值作为数组添加到数据框。实现目标的最佳方法是什么?谢谢!
问题来源:stackoverflow
我认为您需要先添加NaN
,然后再添加此解决方案,最后通过[1:]
进行索引来删除仅第一个NaNs列表:
n = 3
x = np.concatenate([[np.nan] * (n), df['Stock'].values])
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
df['new'] = rolling_window(x, n)[1:].tolist()
print (df)
Date Stock Peak Trough new
0 2002-01-01 33.78 False True [nan, nan, 33.78]
1 2002-01-02 34.19 False False [nan, 33.78, 34.19]
2 2002-01-03 35.44 False False [33.78, 34.19, 35.44]
3 2002-01-04 36.75 True False [34.19, 35.44, 36.75]
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。