【问题标题】:Python calculate new column where value is by subtracting the previous date pricePython通过减去前一个日期价格来计算新列的值
【发布时间】:2018-08-07 16:59:43
【问题描述】:

这里我有股票的开盘价和收盘价:

Open        Close
1994.988    1994.988
2020.8496   2006.1270142499998
2050.030029 2017.3700764583332
2041.51001  2039.3920492708332
2062.52002  2057.9604493541665
2055.469971 2058.56656934375
2046.73998  2059.327636895833

现在我必须创建一个新列“Percent_Change”,计算为 (关闭 - 打开)/打开。

应根据前一天的值进行计算,因此第一行将是 Nan,然后是 0,依此类推...

Per_Change
NaN
0
-0.73%
-1.59%
-0.10%
-0.22%
0.15%
0.62%

【问题讨论】:

    标签: python dataframe stock


    【解决方案1】:

    您可以使用pd.Series.shift 来转移您的结果:

    df['PctChange'] = ((df['Close'] - df['Open']) / df['Close']).shift()
    
    print(df)
    
              Open        Close  PctChange
    0  1994.988000  1994.988000        NaN
    1  2020.849600  2006.127014   0.000000
    2  2050.030029  2017.370076  -0.007339
    3  2041.510010  2039.392049  -0.016189
    4  2062.520020  2057.960449  -0.001039
    5  2055.469971  2058.566569  -0.002216
    6  2046.739980  2059.327637   0.001504
    

    您的预期结果的最后一行必然会丢失,因为您的数据帧索引/长度未更改。

    【讨论】:

      【解决方案2】:
      def compute_precent(row):
          return(float(row[1]-row[0])/row[0])
      df['percentage_change']=df.apply(lambda x:compute_precent(x),axis=1)
      

      【讨论】:

      • 不推荐。 Pandas / NumPy 的主要好处是矢量化计算。 apply 只是一个隐蔽的循环。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2015-07-28
      • 2017-07-23
      • 2021-07-04
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多