【发布时间】:2020-11-09 20:15:23
【问题描述】:
我正在尝试使用每日频率的布尔数据框来掩盖一些频率为 6 小时的时间序列数据。结果应保持在 6 小时频率。下面的函数给了我我想要的,但它超级慢,我确信有更好的版本可以做到这一点。我是一个绝对的初学者...
非常感谢有关如何更好地做到这一点的任何帮助...
#create dataframes
df = pd.DataFrame({'a': [0,1,10,2,5,4,7,5],'b': [0,10,100,20,50,40,70,50], 'date':
[pd.to_datetime('2017-04-01 00:00:00'),
pd.to_datetime('2017-04-01 06:00:00'),
pd.to_datetime('2017-04-01 12:00:00'),
pd.to_datetime('2017-04-01 18:00:00'),
pd.to_datetime('2017-04-02 00:00:00'),
pd.to_datetime('2017-04-02 06:00:00'),
pd.to_datetime('2017-04-02 12:00:00'),
pd.to_datetime('2017-04-02 18:00:00')]})
df = df.set_index('date')
bool_df = pd.DataFrame({'a': [True,False],'b': [False,True], 'date':
[pd.to_datetime('2017-04-01'),
pd.to_datetime('2017-04-02')]})
bool_df = bool_df.set_index('date')
def mask_result(mask, dataframe):
pd.set_option('use_inf_as_na', True)
df_result=dataframe[:0]
ratio_resamp=dataframe.resample('d')
for name, ratio in ratio_resamp:
day=name.strftime('%Y-%m-%d')
boolmask=mask[mask.index==day].values
df_result=df_result.append(ratio/boolmask)
return df_result
mask_result(bool_df,df)
【问题讨论】:
标签: python pandas dataframe time-series