首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将滚动和累积z-得分函数合并为一个

将滚动和累积z-得分函数合并为一个
EN

Stack Overflow用户
提问于 2020-11-25 15:19:30
回答 1查看 233关注 0票数 0

我有两个职能:

  1. First (z_score)计算滚动z-得分值,给定df列
  2. 第二(z_score_cum),以计算累积z-得分,而不带前瞻偏差

代码语言:javascript
复制
# rolling z_score
def z_score(df, window):
    val_column = df.columns[0]
    col_mean = df[val_column].rolling(window=window).mean()
    col_std = df[val_column].rolling(window=window).std()
    df['zscore' + '_'+ str(window)+'D'] = (df[val_column] - col_mean)/col_std
    return df

# cumulative z_score
def z_score_cum(data_frame):
    # calculating length of original data frame to standardize
    len_ = len(data_frame)
    # storing column name & making a copy of data frame
    val_column  = data_frame.columns[0]
    data_frame_standardized_final = data_frame.copy()
    # calculating statistics
    data_frame_standardized_final['mean_past'] = [np.mean(data_frame_standardized_final[val_column][0:lv+1]) for lv in range(0,len_)]
    data_frame_standardized_final['std_past'] = [np.std(data_frame_standardized_final[val_column][0:lv+1]) for lv in range(0,len_)]
    data_frame_standardized_final['z_score_cum'] = (data_frame_standardized_final[val_column] - data_frame_standardized_final['mean_past']) / data_frame_standardized_final['std_past']
    return data_frame_standardized_final[['z_score_cum']]

我想用某种方式把这两个函数组合成一个z-得分函数,这样,不管我把时间窗口作为参数,它都会根据窗口计算z-分数,另外,还会包含一列,其中有累积的z-得分。目前,我正在创建一个时间窗口列表(以天为单位),在调用函数和单独加入这个额外的列时,我正在传递这些窗口,我认为这不是最佳的处理方式。

代码语言:javascript
复制
d_list = [n * 21 for n in range(1,13)]

df_zscore = df.copy()
for i in d_list:
    df_zscore = z_score(df_zscore, i)
    
    
df_zscore_cum = z_score_cum(df)
df_z_scores = pd.concat([df_zscore, df_zscore_cum], axis=1)
EN

回答 1

Stack Overflow用户

发布于 2020-12-03 09:57:45

最后,我是这样做的:

代码语言:javascript
复制
def calculate_z_scores(self, list_of_windows, freq_flag='D'):
        """
        Calculates rolling z-scores and cumulative z-scores based on given list
        of time windows

        Parameters
        ----------
        list_of_windows : list
            a list of time windows.
        freq_flag : string
            frequency flag. The default is 'D' (daily)

        Returns
        -------
        data frame
            a data frame with calculated rolling & cumulative z-score.
        """
        z_scores_data_frame = self.original_data_frame.copy()
        # get column with values (1st column)
        val_column = z_scores_data_frame.columns[0]
        len_ = len(z_scores_data_frame)
        # calculating statistics for cumulative_zscore
        z_scores_data_frame['mean_past'] = [np.mean(z_scores_data_frame[val_column][0:lv+1]) for lv in range(0,len_)]
        z_scores_data_frame['std_past'] = [np.std(z_scores_data_frame[val_column][0:lv+1]) for lv in range(0,len_)]
        z_scores_data_frame['zscore_cum'] = (z_scores_data_frame[val_column] - z_scores_data_frame['mean_past']) / z_scores_data_frame['std_past']
        # taking care of rolling z_scores
        for i in list_of_windows:
            col_mean = z_scores_data_frame[val_column].rolling(window=i).mean()
            col_std = z_scores_data_frame[val_column].rolling(window=i).std()
            z_scores_data_frame['zscore' + '_' + str(i)+ freq_flag] = (z_scores_data_frame[val_column] - col_mean)/col_std
        cols_to_leave = [c for c in z_scores_data_frame.columns if 'zscore' in c]
        self.z_scores_data_frame = z_scores_data_frame[cols_to_leave]
        return self.z_scores_data_frame

只是一个副词:这是我的类方法,但是经过一些修改后,可以作为独立的函数使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65007597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档