Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在为类似预测转换数据时,如何避免重复循环?_Python_Dataframe_Python Decorators_Forecasting_Feature Engineering - Fatal编程技术网

Python 在为类似预测转换数据时,如何避免重复循环?

Python 在为类似预测转换数据时,如何避免重复循环?,python,dataframe,python-decorators,forecasting,feature-engineering,Python,Dataframe,Python Decorators,Forecasting,Feature Engineering,我有一个预测,它是几个子预测的总和(我们称它们为预测1、2和3)。目前,我有一个加载和转换数据的脚本;建立预测1、2和3;使用预测1、2和3进行预测;对这些预测求和并将其写入.csv 预测1、预测2和预测3使用相同类型的特征和不同的原始数据。对于许多要素,构造要素时唯一的区别是原始数据列名的前缀。下面是一个简单的函数示例,该函数使用三个不同的前缀创建一种类型的功能(feature\u 1): def construct_feature_A(data: pandas.DataFrame):

我有一个预测,它是几个子预测的总和(我们称它们为预测1、2和3)。目前,我有一个加载和转换数据的脚本;建立预测1、2和3;使用预测1、2和3进行预测;对这些预测求和并将其写入.csv

预测1、预测2和预测3使用相同类型的特征和不同的原始数据。对于许多要素,构造要素时唯一的区别是原始数据列名的前缀。下面是一个简单的函数示例,该函数使用三个不同的前缀创建一种类型的功能(
feature\u 1
):

def construct_feature_A(data: pandas.DataFrame):
    """ Constructs feature 1 for forecasts 1, 2 and 3. """
    prefixes = ["prefix 1", "prefix_2", "prefix_3"]
    for prefix in prefixes:
        data[f"{prefix}_feature_A"]= data[f"{prefix}_raw_data_name"].apply(lambda x: np.round(x) // 2)
    return data
上述函数很方便,因为它为所有预测1、2和3构造了特征A。问题是函数中的循环在许多不同的函数中被多次写入。通常,甚至前缀名称也是相同的

我想将功能(例如,四舍五入和除以2,如上所述)与此功能需要在多个列上执行这一事实分开。最好的方法是什么

一个想法(我认为)是使用一些装饰器,每种类型的循环/前缀列表使用一个装饰器。我的意思是:

def do_for_all_prefixes(feature_construction_func):
    prefixes = ["prefix_1", "prefix_2", "prefix_3"]

    def wrapper(data, **kwargs):
        for prefix in prefixes:
            data = feature_construction_func(data, prefix, **kwargs)
        return data
    return wrapper


@do_for_all_prefixes
def construct_feature_A(data, prefix):
    data[f"{prefix}_feature_A"] = data[prefix].apply(lambda x: np.round(x) // 2)
    return data

data = construct_feature_A(data)

这种构造存在什么(如果有)潜在问题?

我不明白为什么需要任何循环。
data[[f”{prefix}\u feature\u A“用于前缀中的前缀]]=data[prefixes].round()//2
有什么问题?