按年月分组并在 Python 中查找前 N 个最小值列

2024-05-26

基于来自的输出数据帧这个链接: https://stackoverflow.com/questions/69931611/resample-by-month-and-find-certain-number-of-columns-which-have-smaller-mape-val

import pandas as pd
import numpy as np

np.random.seed(2021)
dates = pd.date_range('20130226', periods=90)
df = pd.DataFrame(np.random.uniform(0, 10, size=(90, 6)), index=dates, columns=['A_values', 'B_values', 'C_values', 'D_values', 'E_values', 'target'])

# all your models
models = df.columns[df.columns.str.endswith('_values')]

# function to calculate mape
def mape(y_true, y_pred):
    y_pred = np.array(y_pred)
    return np.mean(np.abs(y_true - y_pred) / np.clip(np.abs(y_true), 1, np.inf),
                   axis=0)*100

errors = (df.groupby(pd.Grouper(freq='M'))
            .apply(lambda x: mape(x[models], x[['target']]))
         )
res = pd.merge_asof(df[['target']], errors, 
                             left_index=True, 
                             right_index=True,
                             direction='forward'
                            )
print(res)

Out:

              target    A_values    B_values    C_values    D_values   E_values
2013-02-26  1.281624   48.759348   77.023855  325.376455   74.422508  60.602101
2013-02-27  0.585713   48.759348   77.023855  325.376455   74.422508  60.602101
2013-02-28  9.638430   48.759348   77.023855  325.376455   74.422508  60.602101
2013-03-01  1.950960   98.909249  143.760594   90.051465  138.059241  93.461361
2013-03-02  0.690563   98.909249  143.760594   90.051465  138.059241  93.461361
             ...         ...         ...         ...         ...        ...
2013-05-22  5.554824  122.272490  139.420056  133.658101   62.368310  94.334362
2013-05-23  8.440801  122.272490  139.420056  133.658101   62.368310  94.334362
2013-05-24  0.968086  122.272490  139.420056  133.658101   62.368310  94.334362
2013-05-25  0.672555  122.272490  139.420056  133.658101   62.368310  94.334362
2013-05-26  5.273122  122.272490  139.420056  133.658101   62.368310  94.334362

我如何按年月分组并找到最小的前 N ​​值列?

例如,如果我设置N=3,那么预期的结果将是:

感谢您提前的帮助。


这是 argsort 的一种方法:

errors = (df.groupby(pd.Grouper(freq='M'))
            .apply(lambda x: mape(x[models], x[['target']]))
         )

k = 2            # your k here  


# filter top k models
sorted_args = np.argsort(errors, axis=1) < k

res = pd.merge_asof(df[['target']], sorted_args, 
                             left_index=True, 
                             right_index=True,
                             direction='forward'
                            )

topk = df[models].where(res[models])

Then topk好像:

            A_values  B_values  C_values  D_values  E_values
2013-02-26  6.059783       NaN       NaN  3.126731       NaN
2013-02-27  1.789931       NaN       NaN  7.843101       NaN
2013-02-28  9.623960       NaN       NaN  5.612724       NaN
2013-03-01       NaN       NaN  4.521452       NaN  5.693051
2013-03-02       NaN       NaN  5.178144       NaN  7.322250
...              ...       ...       ...       ...       ...
2013-05-22       NaN       NaN  0.427136       NaN  6.803052
2013-05-23       NaN       NaN  2.225667       NaN  2.756443
2013-05-24       NaN       NaN  7.212742       NaN  0.430184
2013-05-25       NaN       NaN  5.384490       NaN  5.461017
2013-05-26       NaN       NaN  9.823048       NaN  6.312104
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按年月分组并在 Python 中查找前 N 个最小值列 的相关文章

随机推荐

  • Rspec : PG::ConnectionBad: PQsocket() 无法获取套接字描述符

    我运行了 rspec 大部分测试都失败了 我对他们遇到了同样的错误 即 Failure Error Unable to find matching line from backtrace ActiveRecord StatementInva
  • Apache Flink 动态设置 JVM_OPT env.java.opts

    是否可以设置自定义 JVM 选项env java opts提交作业时未在作业中指定conf flink conf yaml file 我问的原因是我想在 log4j 中使用一些自定义变量 我也在 YARN 上运行我的工作 我已经使用 CLI
  • 将 2 个不同表中的 2 个值相乘

    我正在尝试使用 SQL 将值 X 乘以值 Y 值 X 位于表 A 中 B 位于表 B 中 我找不到这个问题的答案 表交易 ID Transaction ID Total Amount 1 001 1200 2 002 1500 3 003
  • SHA-256 BigQuery 函数或 UDF

    有人有 UDF 或知道在 BigQuery 中支持 SHA 256 的计划吗 https cloud google com bigquery query reference syntax 16 https cloud google com
  • 在 firebase 函数中设置 dotenv

    我正在尝试将我制作的小型节点表达应用程序移动到 firebase 函数中 该文件有dotenv变量 早些时候我想如果我只是部署并依赖 dotenv 它会起作用 但那并没有发生 于是 我去了firebase的环境配置文章了解如何设置 env
  • 使用express/connect-redis在页面重新加载时抓取现有会话

    使用 connect express 和 socket io 我试图让我的应用程序在重新连接时获取会话详细信息 我的会话显然在客户端连接时工作 但如果我刷新浏览器上的页面 它会忘记所有内容 我的会话cookie肯定是一样的 所以不是那样的
  • 在更新面板中提交表单后运行javascript?

    这真让我抓狂 我在这里阅读了至少 5 个与我的问题密切相关的问题 可能还通过谷歌搜索阅读了 5 页左右的内 容 我就是不明白 我试图在用户填写 已提交注册 的表单后出现一个 jqueryui 对话框 然后重定向到另一个页面 但我一生都无法让
  • 如何处理 BrainTree 中的 Webhook

    我正在尝试使用 BrainTree webhooks 进行订阅交易 但无法让我的页面进行验证 来自脑树 https www braintree payments com docs php webhooks destination verif
  • 将屏幕从 Windows Phone 7 发送到 PC 的工具

    手机屏幕投射到电脑上用什么工具 我在演示文稿中看到过它 但在任何地方都找不到它 Thanks 这是目前仅由微软员工使用的内部工具 相机 投影仪是另一种选择
  • PHP 类扩展字符串变量

    是否可以声明一个类并让它扩展一个变量 class Child extends parentClass 是的 它是通过 eval 实现的 但不建议这样做
  • Java 正则表达式 电子邮件

    首先 我知道不建议使用正则表达式发送电子邮件 但我必须对此进行测试 我有这个正则表达式 b A Z0 9 A Z0 9 A Z 2 4 b 在Java中 我是这样做的 Pattern p Pattern compile b A Z0 9 A
  • 在plotly python中使用按钮过滤不同的数据

    我遵循 PythononToast的答案如何在使用 Python 中的 Plotly 创建的图中添加按钮或下拉菜单 https stackoverflow com questions 65710352 how can i add a but
  • Symfony:为 ManyToOne-OneToMany 关系嵌入表单集合

    我正在使用 Doctrine 和这三个 相关 实体运行 Symfony 2 3 出版物 Author and 作者发表 Both Author and 出版物具有多对一关系作者发表 所以它基本上是一个多对多关系Author and 出版物但
  • 使用 C# 恢复数据库

    我正在尝试使用 Microsoft SqlServer Management Smo 将数据库从一台服务器恢复到另一台服务器 问题是我不断收到错误消息 指出找不到 MDF 文件 原因是它试图在 SQL 实例名称的数据文件夹中查找它的来源 而
  • Eclipse 不从目标平台下载相同版本的最新 jar

    我在 Eclipse IDE Indigo V3 7 2 中遇到一个奇怪的问题 我们使用托管在服务器上的目标平台 该服务器是使用 b3 聚合过程构建的 p2 存储库 我们从不同的团队获得某些组件和功能 每次他们提供插件时 版本号都保持不变
  • iOS CoreBluetooth:状态保存和恢复

    希望在这里得到一些意见 在我当前的 iOS 项目中 我使用 CoreBluetooth 和 swift 该应用程序可以在后台使用 CoreBluetooth 进行通信 这基本上可以工作 外设需要与 iOS 设备建立有效连接才能按预期工作 每
  • padStart 有什么替代方案[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 javascript 中使用 padStart 但它不适用于 Internet Explorer
  • {PHP} 致命错误:不在对象上下文中时使用 $this (Joomla)

    我真的不了解 php 并且碰壁了 问题是我的网站显示以下错误 Fatal error Using this when not in object context in hermes web07 b2350 pow thefoodie htd
  • Objective-c 截断字符串并在末尾添加省略号

    如何在 Objective C 中截断字符串 然后在末尾添加省略号 NSString origString A very long string blah blah blah const int clipLength 18 if origS
  • 按年月分组并在 Python 中查找前 N 个最小值列

    基于来自的输出数据帧这个链接 https stackoverflow com questions 69931611 resample by month and find certain number of columns which hav