如何降低 df.apply() 的时间复杂度?

问题描述 投票:0回答:0

有一个名为“df”的数据框,其中包括“开盘价”、“低价”、“高价”和“收盘价”列。我将计算在给定蜡烛之后由后续蜡烛的最低价和最高价形成的范围包含该蜡烛的开盘价的次数。我已经编写了一些代码来完成此操作,但需要很长时间才能运行。我想我可以通过使用 numpy 和 numba 来减少运行时间。能否提供具体的实施方案来帮我实现这个目标?

            def get_num_klines(datetime, open_price, df):
                klines = df.loc[df['Datetime'] > datetime]
                klines['Low'].astype(float)
                klines['Lowsub'] = open_price - klines['Low']
                klines['High'].astype(float)
                klines['Highsub'] = klines['High'] - open_price
                num_klines = klines.iloc[(klines['Lowsub'] > 0).values & (klines['Highsub'] > 0).values ]
                num_klines['Datetime'] = pd.to_datetime(num_klines['Datetime'])
                num_klines['Datetimesub'] = num_klines['Datetime'] - num_klines['Datetime'].shift(1)
                numsk = (num_klines['Datetimesub'] > pd.Timedelta('10 days')).sum()
                if numsk >=1:
                    numsk = numsk + 1
                return numsk


            df['Datetime'] = pd.to_datetime(df['Datetime'])
            start = datetime.datetime.now()
            df['is_between'] = df.apply(lambda row: get_num_klines(row['Datetime'], row['Open'], df), axis=1)
            end = datetime.datetime.now() - start
numpy
© www.soinside.com 2019 - 2024. All rights reserved.