开发者社区> 问答> 正文

Python:将数组添加为包含每行x先前值的新列

我有这个数据集:

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

展开
收起
is大龙 2020-03-23 17:21:42 389 0
1 条回答
写回答
取消 提交回答
  • 我认为您需要先添加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

    2020-03-23 17:21:49
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载