我有一张Pandas 的桌子.这张表包含了产品的时间和价格.
为了分析的目的,我想有2列,其中将包含下一次当产品是超过100美元的价格变化在任一方向.
例如,如果我在单元格09:19单元格,下一个价格高于100美元将是14:02低于100美元将是11:39,所以14:02 11:39应该在09:19行在相应列.&&
同样的方式,对单元格09:56,下一个价格高于100美元将是14:02低于100美元将是12:18,所以这两个值将出现在09:56的行.&
Table
Time Price Up_Time Down_Time
09:19:00 3252.25
09:24:00 3259.9
09:56:00 3199.4
10:17:00 3222.5
10:43:00 3191.25
11:39:00 3143
12:18:00 2991.7
13:20:00 3196.35
13:26:00 3176.1
13:34:00 3198.85
13:37:00 3260.75
14:00:00 3160.85
14:02:00 3450
14:19:00 3060.5
14:30:00 2968.7
14:31:00 2895.8
14:52:00 2880.7
14:53:00 2901.55
14:55:00 2885.55
14:57:00 2839.05
14:58:00 2871.5
15:00:00 2718.95
我正在使用以下代码,它可以工作,但需要15—20分钟的1个数据集.
for i, row in df.iterrows():
time_up = np.nan
time_down = np.nan
for j in range(i+1, len(df)):
diff = df.iloc[j]['Price'] - row['Price']
if diff > 100:
time_up = df.iloc[j]['Time']
elif diff < -100:
time_down = df.iloc[j]['Time']
if not pd.isna(time_up) or not pd.isna(time_down):
break
df.at[i, 'Up_Time'] = time_up
df.at[i, 'Down_Time'] = time_down
有没有更有效的方法来做这件事?