python - 存储和调用 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 功能效率低下,有些人不愿意使用它。这是一个可能的解决方案,但我想知道是否有更好的方法通过直接使用窗口的方法而不是应用然后另一种方法。
解决方案
可以在您的情况下使用的功能是.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])
推荐阅读
- vbscript - 通过vbs下载文件
- javascript - 在 NestJS 中使用依赖注入导入 TypeScript 模块
- css - 在 React 应用程序的上下文中导出 CSS
- java - 优化段落找词
- reactjs - 使用动态键包裹在 div 中时,React Collapse 过渡没有动画效果
- asp.net-mvc - 看不到我的 AspNet Identity 表?
- java - 无法以编程方式将 RelativeLayout 添加到 RelativeLayout
- python-3.x - TPU Classifier InvalidArgumentError: No OpKernel was registered to support Op 'CrossReplicaSum' with these attrs
- html - 停止 mailto:从打开邮件应用程序 iMac
- python - Python将变量放入sql FROM语句