Как рассчитать с предыдущим значением строки столбца, если он может быть объявлен только после того, как его следует использовать в панде dataframe? - PullRequest
0 голосов
/ 10 октября 2018

Ниже приводится структура данных, которую я имею:

import datetime
import pandas as pd
import numpy as np

todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D')
data = pd.DataFrame(index=index)

data['Open'] = np.random.randint(20,40, size=len(data))
data['High'] = np.random.randint(40,50, size=len(data))
data['Low'] = np.random.randint(10,20, size=len(data))
data['Close'] = np.random.randint(10,20, size=len(data))

Я хотел бы выполнить следующие расчеты:

capital = 30000

data['Shares'] = (capital * 0.05 / data['Close'].shift(1) - data['Low'].shift(1)).round(0)
data['Open_price'] = data['Open'] + 0.5 * (data['High'] - data['Open'])
data['Floating_P/L'] = data['Shares'] * data['Close']
data['Close_price'] = data['Close'] - 0.5 * (data['Close'] - data['Low'])
data['Closed_P/L'] = data['Shares'].shift(1) * data['Close_price']
data['Closed_Balance'] = capital + data['Closed_P/L'].cumsum()
data['Equity'] = data['Closed_Balance'] + data['Floating_P/L']

capital = data['Equity'].shift(1)

Как видите, Equity рассчитывается посегодняшнее Shares число, которое рассчитывается из вчерашнего Equity.Я хочу установить capital в качестве начального значения Equity в первом индексе и рассчитать Shares на основе этого числа в первом индексе.По второму индексу Shares должен быть рассчитан из Equity, сдвинутых на одну строку вверх.Как я могу это сделать?

1 Ответ

0 голосов
/ 10 октября 2018

В приведенном выше коде я вижу, что начальное значение Shares и первые два значения Equity равны Nans, поскольку первое значение Shares рассчитывается с использованием Close и Lowколонны сместились вверх.Предполагая, что вы можете установить здесь некоторые значения,

попробуйте сделать это?

  1. Создать пустые столбцы в данных для Equity and Shares

    data['Equity']=''
    data['Shares']=''
    
  2. установить capital в качестве начального значения Equity.Поскольку вы упомянули начальное значение capital = 30000

    capital= 30000
    data['Equity'][0]= 30000 
    
  3. Рассчитайте начальное значение Shares.Здесь попробуйте установить значения вместо Nans для Close and Low

    data['Shares'][0]= (capital * 0.05 / data['Close'].shift(1)[0] - data['Low'].shift(1))[0].round(0)
    
  4. , затем используйте цикл for, который выполняет итерацию от второго индекса к длине данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...