Python: добавить столбец данных, связанный с другим столбцом - PullRequest
0 голосов
/ 29 января 2019

Я импортировал данные акции из Yahoo в информационный фрейм, используя 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

Я хочу иметь возможность вставить еще один столбец под названием «Возврат журнала», который принимает АД закрытия текущего дня (даты неделим все на 1 день из-за торговых дней) и делим его на предыдущие дни Adj Close, а затем принимаем натуральный логарифм этого фактора

Т.е. Ln (A (сегодня) / A(вчера)), где A - просто прил. close.

Кстати, моя переменная dataframe называется 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 (вчера)).(натуральный логарифм)

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Попробуйте это:

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

Если это не совсем то, что вы хотели, но близко, вот документы для смены .

Вы также можете использовать resample или set_index с date_range , если отсутствуют временные данные.

0 голосов
/ 29 января 2019

Вам нужно Series.pct_change:

df['Log Return'] = df['Adj Close'].pct_change()

При необходимости ln:

df['Log Return'] = np.log(df['Adj Close'].pct_change())
0 голосов
/ 29 января 2019

Вы можете попробовать это:

# First ensure dates are in order
df = df.sort_values('Date')
# Divide all rows by their previous and find log
diff = np.log(df[1:]['Adj Close'] / df[0:-1]['Adj Close'])
# Add new column, first row will be NaN as it has no previous day
df['Log Return'] = pd.concat(pd.Series([pd.nan]), diff)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...