问题描述
在下面的代码中,我创建了具有每日数据的 df_d 和具有 5 分钟间隔的日内数据的 df_i。
我在 df_d(Volume、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 (将#修改为@)