Я хочу использовать команду apply для динамического изменения содержимого моего фрейма данных, таблица выглядит так:
index price signal stoploss
0 0 1000 True 990.0
1 1 1010 False 990.0
2 2 1020 True 1010.0
3 3 1000 False 1010.0
4 4 990 False 1010.0
5 5 980 False 1010.0
6 6 1000 False 1010.0
7 7 1020 True 1010.0
8 8 1030 False 1010.0
9 9 1040 False 1010.0
мой код:
def test(row, dd):
if row.signal:
dd['inorder']=True
row['stoploss']=1
df = pd.DataFrame({'index':[0,1,2,3,4,5,6,7,8,9],
'price':[1000,1010,1020,1000,990,980,1000,1020,1030,1040],
'signal':[True, False, True, False, False, False, False, True, False, False]})
if __name__ == '__main__':
df['stoploss'] = df.loc[df['signal'], 'price'] - 10
df['stoploss'].ffill(inplace=True)
xx = dict(inorder=False)
df.apply(lambda row: test(row, xx), axis=1)
print(df)
Когда я отслеживаю функциюtest, я вижу, что значение действительно изменяется на 1, но вне области функционального тестирования, похоже, это никак не влияет на фрейм данных.
Я пытался использовать другой способ изменения содержимогоdataframe,
for k, row in df.iterrows():
if row.signal:
xx['inorder'] = True
df.loc[k, 'stoploss'] = 1
этот работает, но, очевидно, он намного медленнее, чем применяется.
Правильный результат, который я ожидаю, таков:
index price signal stoploss
0 0 1000 True 1.0
1 1 1010 False 990.0
2 2 1020 True 1.0
3 3 1000 False 1010.0
4 4 990 False 1010.0
5 5 980 False 1010.0
6 6 1000 False 1010.0
7 7 1020 True 1.0
8 8 1030 False 1010.0
9 9 1040 False 1010.0
Как этого добитьсяназначение в заявке, пожалуйста?
Спасибо