【发布时间】:2020-08-02 15:14:38
【问题描述】:
我有一个追随者。
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
【问题讨论】:
标签: pandas performance optimization jupyter-notebook