У меня есть следующий DF.
Date Time Open High Low Close
0 2010-01-03 17:00:00 1.4301 1.4304 1.4301 1.4304
1 2010-01-03 17:01:00 1.4303 1.4303 1.4303 1.4303
Мне нужно нормализовать цены внутри каждого дня, поэтому необходимо разделить цену каждого дня на ее первое значение дня, чтобы каждый день начинался с 1.0. Я написал следующий код, но он работает очень медленно, как мне его улучшить? Я считаю это слишком сложным, есть ли элегантный способ?
for year in range(2010, 2021):
for month in range(1, 13):
for day in range(1, 31):
mutdf = dfc.loc[(dfc['Date'].dt.year == year) & (dfc['Date'].dt.month == month) & (dfc['Date'].dt.day == day),
['Open', 'High', 'Low', 'Close']]
if mutdf.empty:
continue
mutdf['Open'] = mutdf['Open'].divide(mutdf.iloc[0, 0])
mutdf['High'] = mutdf['High'].divide(mutdf.iloc[0, 1])
mutdf['Low'] = mutdf['Low'].divide(mutdf.iloc[0, 2])
mutdf['Close'] = mutdf['Close'].divide(mutdf.iloc[0, 3])
dfc.loc[(dfc['Date'].dt.year == year) & (dfc['Date'].dt.month == month) & (dfc['Date'].dt.day == day),
['Open', 'High', 'Low', 'Close']] = mutdf
Желаемый результат:
Date Time Open High Low Close
0 2010-01-03 17:00:00 1.00000 1.00000 1.00000 1.000000
1 2010-01-03 17:01:00 1.00014 0.99993 1.00014 0.999930
2 2010-01-03 17:02:00 1.00007 0.99993 1.00000 0.999930
3 2010-01-03 17:03:00 1.00007 0.99986 1.00007 0.999860
4 2010-01-03 17:04:00 1.00000 0.99986 0.99979 0.999720
5 2010-01-03 17:06:00 1.00000 0.99979 0.99993 0.999790
6 2010-01-03 17:08:00 0.99993 0.99986 0.99993 0.999790
7 2010-01-03 17:09:00 0.99993 0.99979 0.99979 0.999581
8 2010-01-03 17:10:00 0.99986 0.99979 0.99986 0.999790
9 2010-01-03 17:12:00 1.00007 0.99993 1.00007 0.999930