如何使用一个 np.where 语句更新数据框 A 的 3 列与数据框 B 的 3 个相应列 正确性替代品性能

问题描述

在下面的代码中,我创建了具有每日数据的 df_d 和具有 5 分钟间隔的日内数据的 df_i

我在 df_dVolume、Volume1 和 Volume2)中有 3 列,我想在各自的日期传播到 df_i。 >

当我调用df_i,df_d = main_process()时,代码实现了结果。但是,当我在大数据上运行它时,这会占用大量时间。

如何只用一个 np.where 语句更新 df_i 的 3 列?或者就此而言,实现这一目标的最快方法是什么?

import pandas as pd
import numpy as np
import datetime

def dt_to_integer( dt_time):
    return 10000*dt_time.year + 100*dt_time.month + dt_time.day

def main_process():
 
    todays_date = datetime.datetime.now().date()
    index = pd.date_range( todays_date,periods=5,freq='D')
     
    columns = [ 'Volume','Volume1','Volume2']
     
    df_d = pd.DataFrame( index=index,columns=columns)
    df_d[ 'Volume'] = df_d.index.day * 100
    df_d[ 'Volume1'] = df_d.index.day * 500
    df_d[ 'Volume2'] = df_d.index.day * 1000

    todays_date = datetime.datetime.now().date()
    index = pd.date_range( todays_date,periods=1440,freq='5min')
     
    columns = [ 'Volume','Volume2']
     
    df_i = pd.DataFrame( index=index,columns=columns)
    df_i = df_i.loc[ df_i.index.isin( df_i.between_time('09:30:00','16:00:00').index)]
     
    for i in range( len( df_d)):
        the_date = dt_to_integer( df_d.index[i])
        
        df_i.Volume = np.where( dt_to_integer( df_i.index) == the_date,df_d.Volume[ i],df_i.Volume)
        df_i.Volume1 = np.where( dt_to_integer( df_i.index) == the_date,df_d.Volume1[ i],df_i.Volume1)
        df_i.Volume2 = np.where( dt_to_integer( df_i.index) == the_date,df_d.Volume2[ i],df_i.Volume2)
        
    return df_i,df_d

df_i,df_d = main_process()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)