У меня есть df
, который я хочу сгруппировать Date
и применить к нему функцию.
Date Symbol Shares
0 1990-01-01 A 0.0
1 1990-01-01 B 0.0
2 1990-01-01 C 0.0
3 1990-01-01 D 0.0
4 1990-01-02 A 50.0
5 1990-01-02 B 100.0
6 1990-01-02 C 66.0
7 1990-01-02 D 7.0
8 1990-01-03 A 11.0
9 1990-01-03 B 123.0
10 1990-01-03 C 11.0
11 1990-01-03 D 11.0
Я смогу получить доступ к значению Shares
для Symbol
изпредыдущий Date
в функции.Как я могу это сделать?Создание df[prev_shares]
наподобие df.groupby('Symbol')['Shares'].shift(1)
перед применением функции не вариант, потому что функция вычисляет Shares
строка за строкой.
Это должно выглядеть следующим образом:
def calcs(x):
x.loc[some_condition, 'Shares'] = ...
x.loc[other_condition, 'Shares'] = # return 'Shares' from previous 'Date' for this 'Symbol'
df = df.groupby('Date').apply(calcs)
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ:
Я отправляю созданную мной функцию.
Equity = 10000
def calcs(x):
global Equity
if x.index[0]==0: return x
x.loc[x['condition'] == True, 'Shares'] = np.floor((Equity * 0.02 / x['ATR']).astype(float))
x.loc[x['condition'] == False, 'Shares'] = # locate Symbol for the previous Date and return its Shares value
x['Closed_P/L'] = x['Shares'] * x['Close']
Equity += x['Closed_P/L'].sum()
return x
data = data.groupby('Date').apply(calcs)