Skip to main content
 首页 » 编程设计

Python:将列添加到与另一列相关的数据框

2025年05月04日12mfryf

我已使用 pandas_datareader 从雅虎将股票数据导入数据框。 有 2 列:日期和调整后的股票收盘价。

Date        Adj Close           
2017-08-31  168.851196 
2017-09-01  169.867691 
2017-09-05  165.333496 
2017-09-06  165.233810 
2017-09-07  166.001160 
2017-09-08  163.121201 
2017-09-11  168.412735 
2017-09-12  169.020630 
2017-09-13  169.777969 
2017-09-14  168.811356 
2017-09-15  179.484131 
2017-09-18  186.898300 
2017-09-19  186.698990 
2017-09-20  185.194214 
2017-09-21  180.131882 
2017-09-22  178.377991 
2017-09-25  170.405807 
2017-09-26  171.362473 
2017-09-27  175.119354 
2017-09-28  175.069534 
2017-09-29  178.148788 
2017-10-02  178.377991 
2017-10-03  178.746704 
2017-10-04  180.241486 
2017-10-05  180.141861 
2017-10-06  180.670013 
2017-10-09  184.745804 
2017-10-10  188.273499 
2017-10-11  190.276505 
2017-10-12  190.366211 

我希望能够插入另一个名为“Log return”的列,该列采用当天的 Adj 收盘价(由于交易日,这些日期并非全部相隔 1 天)并将其除以前几天 Adj Close然后取该商的自然对数

即Ln(A(今天)/A(昨天)),其中 A 只是 adj 收盘价。

顺便说一下,我的数据框变量叫做 df。

import pandas as pd 
import pandas_datareader as web 
 
#import datetime internal datetime module 
#datetime is a Python module 
import datetime 
 
#datetime.datetime is a data type within the datetime module 
start = datetime.datetime(2015, 9, 1) 
end = datetime.datetime(2018, 12, 31) 
 
#DataReader method name is case sensitive 
df = web.DataReader("nvda", 'yahoo', start, end) 
 
#invoke to_csv for df dataframe object from  
#DataReader method in the pandas_datareader library 
 
#..\first_yahoo_prices_to_csv_demo.csv must not 
#be open in another app, such as Excel 
 
df = df.iloc[0:, 5:]  #Trims the set to Adj Close 

这就是我目前的代码。 编辑 我不想要 A(今天)/A(昨天)-1,我实际上需要 Ln(A(今天)/A(昨天))。 (自然对数)

请您参考如下方法:

试试这个:

df['Adj Yesterday'] = df['Adj Close'].shift() 
df['Log Return'] = df['Adj Close'] / df['Adj Yesterday'] - 1. 

如果这不是您想要的,但接近,here is the docs for shift .

您还可以使用 resample , 或 set_index与 date_range如果缺少时间数据。