Python 熊猫的windows对象的函数处理程序的存储和调用

Python 熊猫的windows对象的函数处理程序的存储和调用,python,pandas,time-series,Python,Pandas,Time Series,我关于对象和方法的问题可以应用于此 我们可以在滚动窗口上使用一些方法,例如求和、平均值等。它们可以在中找到 我想存储一个函数处理程序,并在以后调用它。 我的目标是从用户处接收字符串,然后正确地调用函数 例如,如果用户输入是平均值,那么我想计算滚动窗口的平均值: df_win=df.滚动1d.平均值 我想支持一些案例,所以我想使用字典: dict_action={平均值:?,和:?,标准值:?} df_win=df.滚动'1d'。???并以某种方式调用存储在dict_action[usr_inpu

我关于对象和方法的问题可以应用于此

我们可以在滚动窗口上使用一些方法,例如求和、平均值等。它们可以在中找到

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

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

df_win=df.滚动1d.平均值

我想支持一些案例,所以我想使用字典:

dict_action={平均值:?,和:?,标准值:?} df_win=df.滚动'1d'。???并以某种方式调用存储在dict_action[usr_input]中的函数 正如你可能猜到的,我需要帮助填充???在字典中以及我如何调用这些函数处理程序

到目前为止,我试图直接将函数放入字典中,例如dict_action={Mean:pandas.core.window.rolling.rolling.Mean,…}

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

我设法用一些if/else手动完成,但我想有一种更聪明的方法


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

在您的情况下可以工作的函数是.agg:

df=pd.DataFramenp.random.randint0,10,size=10,3 df.rolling3.agg['mean','sum','std'] 当用户传递字符串时,如果随后将其小写,则可以在.agg函数中使用该字符串

用户输入=平均值。较低 df.rolling3.agg[用户输入]
在您的情况下可以工作的函数是.agg:

df=pd.DataFramenp.random.randint0,10,size=10,3 df.rolling3.agg['mean','sum','std'] 当用户传递字符串时,如果随后将其小写,则可以在.agg函数中使用该字符串

用户输入=平均值。较低 df.rolling3.agg[用户输入]
假设您拥有此数据帧:

df=pd.DataFrame {'values':np.random.randn6}, 指数=pd.日期范围'28-06-2020',周期=6,频率=8小时' 价值观 2020-06-28 00:00:00 -1.846436 2020-06-28 08:00:00 -0.327604 2020-06-28 16:00:00 1.052729 2020-06-29 00:00:00 -1.087175 2020-06-29 08:00:00 0.268455 2020-06-29 16:00:00 1.223025 您可以使用函数与任何函数聚合数据。对于您的操作,您可以使用numpy中的np.mean、np.sum和np.std函数:

结果:

2020-06-28 00:00:00 -1.846436 2020-06-28 08:00:00 -1.087020 2020-06-28 16:00:00 -0.373770 2020-06-29 00:00:00 -0.120683 2020-06-29 08:00:00 0.078003 2020-06-29 16:00:00 0.134768 频率:8H,名称:值,数据类型:float64
假设您拥有此数据帧:

df=pd.DataFrame {'values':np.random.randn6}, 指数=pd.日期范围'28-06-2020',周期=6,频率=8小时' 价值观 2020-06-28 00:00:00 -1.846436 2020-06-28 08:00:00 -0.327604 2020-06-28 16:00:00 1.052729 2020-06-29 00:00:00 -1.087175 2020-06-29 08:00:00 0.268455 2020-06-29 16:00:00 1.223025 您可以使用函数与任何函数聚合数据。对于您的操作,您可以使用numpy中的np.mean、np.sum和np.std函数:

结果:

2020-06-28 00:00:00 -1.846436 2020-06-28 08:00:00 -1.087020 2020-06-28 16:00:00 -0.373770 2020-06-29 00:00:00 -0.120683 2020-06-29 08:00:00 0.078003 2020-06-29 16:00:00 0.134768 频率:8H,名称:值,数据类型:float64
谢谢,我不熟悉这个函数。似乎适合我需要的谢谢,我不熟悉这个功能。似乎适合我需要的谢谢,我不熟悉这个功能。似乎适合我需要的谢谢,我不熟悉这个功能。似乎适合我的需要
import numpy as np

dict_action = {"Mean": np.mean, "Sum": np.sum, "Std": np.std}
df_win = df.rolling('1d').agg(dict_action["Mean"])