def func1(x):
try:
return x.index[x.argmax()]
except:
return -999
def func2(x):
try:
return x.index[x.argmin()]
except:
return -999
df_origin['high_time'] = (df['last'].resample(label='right', closed='right',rule=period).agg(lambda x:func1(x)))
df_origin['low_time'] = (df['last'].resample(label='right', closed='right',rule=period).agg(lambda x:func2(x)))
原表是一个时间顺序的价格序列 如果不写 try except 的话 x.index[x.argmax()]会因为 resample 遇到非交易时间段会自动切割出空值,argmax 在空值会报错。感觉方法不好,想请教下正确思路。。
1
milkpuff 2022-06-08 19:10:59 +08:00
用 groupby ,aggregate
group = data.groupby(data.index.values.astype(f'datetime64[{period}]').astype('datetime64[ns]')) data = group.agg({ 'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last', 'volume': 'sum' }) |