首页 > 解决方案 > 存储和调用 pandas 的 windows 对象的函数处理程序

问题描述

我的问题是关于熊猫的滚动窗口对象和方法可以应用在它上面。

我们可以在滚动窗口上使用一些方法,例如sum()mean()等等。它们可以在 Window object 的文档部分中找到。

我想存储一个函数处理程序并稍后调用它。我的目标是从用户那里接收一个字符串,然后正确调用一个函数。

例如,如果用户输入是,"Mean"那么我想计算滚动窗口的平均值:

df_win = df.rolling('1d').mean()

我想支持某些情况,所以我想使用字典:

dict_action = {"Mean":???, "Sum":???, "Std":???}
df_win = df.rolling('1d').??? # and somehow call to function stored in dict_action[usr_input]

正如您可能猜到的那样,我需要帮助填写???字典以及如何调用这些函数处理程序。

到目前为止,我尝试将函数直接放在字典中,例如dict_action = {"Mean":pandas.core.window.rolling.Rolling.mean, ...}

但是当我尝试调用该函数时它不起作用,因为它假设是针对特定的窗口对象。

我设法使用一些 if/else 来“手动”完成它,但我想有一种更聪明的方法。

我知道窗口可接受的功能之一是apply允许我传递我想要的每个功能。从我在这里看到的情况来看,pandas 的 apply 功能效率低下,有些人不愿意使用它。这是一个可能的解决方案,但我想知道是否有更好的方法通过直接使用窗口的方法而不是应用然后另一种方法。

标签: pythonpandastime-series

解决方案


可以在您的情况下使用的功能是.agg

df = pd.DataFrame(np.random.randint(0, 10, size=(10, 3)))
df.rolling(3).agg(['mean', 'sum', 'std'])

当用户传递一个字符串时,如果你之后将其小写,它可以在.agg函数中使用。

user_input='Mean'.lower()
df.rolling(3).agg([user_input])

推荐阅读