我有一个pandas dataframe
,其中列出了项目,他们的销售地点,以及模型,使上述项目最低的Map出所有模型运行。
这是一个什么样的DF看起来像一个样本。
import pandas as pd
model = ['autoarima', 'prophet', 'TES']
item = ['102354','215898','302584']
MAPE = [46.2, 23.5, 15.6]
location = ['KR_DC', 'KR_DC','KR_DC']
df_dict = {'fcast_item':item, 'location':location, 'mape':MAPE, 'best_model':model}
df = pd.DataFrame.from_dict(df_dict)
字符串
我想使用model
的值来调用存储在类中的模型函数,并运行返回一个嵌套框的函数。
例如,如果模型是'TES',那么我希望运行以下代码行:
df = [statmod.stats_models(df).tesa_model(target='corrected_demand', combo = combo, length=length_) for combo in combos]
型
如果模型是autoarima
,则将运行以下命令
df = [statmod.stats_models(df).arima_model(target='corrected_demand', combo = combo, length=length_) for combo in combos]
型
如果有帮助的话,以下内容将始终相同:df = [statmod.stats_models(df).
和(target='corrected_demand', combo = combo, length=length_) for combo in combos]
。只有中间,即模型函数本身所在的位置会改变。
我从来没有做过这种类型的动态编码,其中一个框架值调用一行代码来运行。这可能吗?
4条答案
按热度按时间t9eec4r01#
你可以尝试使用Python内置的
exec
函数,沿着f字符串,每当我必须像这样做一些动态编码时(我不是一个专业的Python程序员,所以可能有一个更有效的方法来解决这类问题)下面是一个示例代码:
字符串
您可能需要对通过原始df获得的模型值进行一些处理,或者更改这些df中的值以匹配函数名。(例如:df值为“autoarima”,但您的函数名为“arima_model”,因此将此值提供给exec函数将“autoarima_model”)
7kjnsjlb2#
您可以使用pandas中的apply方法来根据特定列中的值调用Python函数。在本例中,使用apply方法将custom_function应用于'Age'列。结果存储在名为'Age_Status'的新列中。custom_function检查年龄是否小于30,如果为true,则返回'Young',否则返回'Not Young'。
您可以使用自己的函数替换custom_function,并根据感兴趣的列中的值调整逻辑。这种方法非常灵活,允许您使用任何自定义函数来处理DataFrame列。
k75qkfdt3#
字符串
输出结果:
型
xam8gpfp4#
这里有两个返回类似结果的选项。不同之处在于缺少的值,但我相信这也可以指定。
字符串
返回的框架存储在'FrameRef'列中。dt_tmp1为c返回NaN,dt_tmp2为c返回None。如果你只是通过字典Map,那么我相信.map()是预期的方法。
你也可以对一个系列使用.apply(),但我没有特别的原因,使用了行版本。