有效比较当月运行总计与当月总计

2023-12-26

我有一个数据框(df)。它包含predicted模型的每日数据,直至 2020 年底。随着一年中的每一天,actual and id数据被添加到该行。每天有多个名字

+------+-----+-----------+--------+------------+
| NAME | ID  | PREDICTED | ACTUAL | YYYY_MM_DD |
+------+-----+-----------+--------+------------+
| Nir  | 215 | 100       | 400    | 2020-01-01 |
| Nir  | 215 | 200       | 400    | 2020-01-02 |
| Nir  | 215 | 100       | 400    | 2020-01-03 |
| Nir  | 215 | 200       | 400    | 2020-01-04 |
| Nir  | 215 | 100       | 400    | 2020-01-05 |
| Nir  | 215 | 200       | 400    | 2020-01-06 |
| Nir  | 215 | 100       | 400    | 2020-01-07 |
| Nir  | 215 | 200       | 400    | 2020-01-08 |
| Nir  | 215 | 100       | 400    | 2020-01-09 |
| Nir  | 215 | 200       | 400    | 2020-01-10 |
| Nir  | 215 | 100       | 400    | 2020-01-11 |
| Nir  | 215 | 200       | 400    | 2020-01-12 |
| Nir  | 215 | 100       | 400    | 2020-01-13 |
| Nir  | 215 | 200       | 400    | 2020-01-14 |
| Nir  | 215 | 100       | 400    | 2020-01-15 |
| Nir  | 215 | 200       | 400    | 2020-01-16 |
| Nir  | 215 | 100       | 400    | 2020-01-17 |
| Nir  | 215 | 200       | 400    | 2020-01-18 |
| Nir  | 215 | 100       | 400    | 2020-01-19 |
| Nir  | 215 | 200       | 400    | 2020-01-20 |
| Nir  | 215 | 100       | 400    | 2020-01-21 |
| Nir  | 215 | 200       | 400    | 2020-01-22 |
| Nir  | 215 | 100       | 400    | 2020-01-23 |
| Nir  | Nan | 100       | Nan    | 2020-01-24 |
| Nir  | Nan | 100       | Nan    | 2020-01-25 |
| Nir  | Nan | 100       | Nan    | 2020-01-26 |
| Nir  | Nan | 100       | Nan    | 2020-01-27 |
| Nir  | Nan | 100       | Nan    | 2020-01-28 |
| Nir  | Nan | 100       | Nan    | 2020-01-29 |
| Nir  | Nan | 100       | Nan    | 2020-01-30 |
| Nir  | Nan | 100       | Nan    | 2020-01-31 |
| Xyc  | 40  | 800       | 500    | 2020-01-01 |
| Xyc  | 40  | 100       | 500    | 2020-01-02 |
| Xyc  | 40  | 100       | 500    | 2020-01-03 |
| Xyc  | 40  | 100       | 500    | 2020-01-04 |
| ...  | ... | ...       | ...    | ...        |
| ...  | ... | ...       | ...    | ...        |
+------+-----+-----------+--------+------------+

我想添加一个名为payout. The payout应为 0,除非actual,本月迄今已超过predicted.

即,对于Nir,我们可以看到总和predicted is 4200。所以payout应该为 0 直到actual通过 4200。一旦超过该阈值,则payout应该是 1%actual-predicted。有了上述数据,输出将如下所示:

+------+-----+-----------+--------+---------------+--------+------------+
| NAME | ID  | PREDICTED | ACTUAL | MONTH_TO_DATE | PAYOUT | YYYY_MM_DD |
+------+-----+-----------+--------+---------------+--------+------------+
| Nir  | 215 | 100       | 400    | 400           | 0      | 2020-01-01 |
| Nir  | 215 | 200       | 400    | 800           | 0      | 2020-01-02 |
| Nir  | 215 | 100       | 400    | 1200          | 0      | 2020-01-03 |
| Nir  | 215 | 200       | 400    | 1600          | 0      | 2020-01-04 |
| Nir  | 215 | 100       | 400    | 2000          | 0      | 2020-01-05 |
| Nir  | 215 | 200       | 400    | 2400          | 0      | 2020-01-06 |
| Nir  | 215 | 100       | 400    | 2800          | 0      | 2020-01-07 |
| Nir  | 215 | 200       | 400    | 3200          | 0      | 2020-01-08 |
| Nir  | 215 | 100       | 400    | 3600          | 0      | 2020-01-09 |
| Nir  | 215 | 200       | 400    | 4000          | 0      | 2020-01-10 |
| Nir  | 215 | 100       | 400    | 4400          | 3      | 2020-01-11 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-12 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-13 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-14 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-15 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-16 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-17 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-18 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-19 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-20 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-21 |
| Nir  | 215 | 200       | 400    | ...           | 2      | 2020-01-22 |
| Nir  | 215 | 100       | 400    | ...           | 3      | 2020-01-23 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-24 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-25 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-26 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-27 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-28 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-29 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-30 |
| Nir  | Nan | 100       | Nan    |               |        | 2020-01-31 |
| Xyc  | 40  | 800       | 500    | 500           | 0      | 2020-01-01 |
| Xyc  | 40  | 100       | 500    | 1000          | 0      | 2020-01-02 |
| Xyc  | 40  | 100       | 500    | 1500          | 4      | 2020-01-03 |
| Xyc  | 40  | 100       | 500    | 2000          | 4      | 2020-01-04 |
| ...  | ... | ...       | ...    |               |        | ...        |
| ...  | ... | ...       | ...    |               |        | ...        |
+------+-----+-----------+--------+---------------+--------+------------+

在上面的输出中,Xyc总共预测 2000,所以payout应该为 0 直到actual也过了2000年。在真实的数据框中,每日数据约为 70names,所以我觉得可能需要分组。


我试过了:

new_sum = [df.actual.values[0]] for i in range(1, len(df.index)): 
    new_sum.append(new_sum[i-1]+df.actual.values[i]) 
df['actual_sum'] = new_sum 

然而,这只是给了我一个运行总数actual。我也尝试过这个:

df['inc'] = df['actual'] - df['predicted'] df['payout'] = np.where(df['inc']>=1, (df['inc'] / 100) * 1, 0) 

但上述内容并不能确保该月迄今为止 >= 归属 1% 之前该月的总计。


首先,您需要从数据中删除 NaN 行。

干得好:

import pandas as pd
import numpy as np


df = pd.DataFrame({'Name':['Nir','Nir','Nir','Nir','Xyc','Xyc','Xyc'],'PREDICTED':[100,200,100,200,100,200,300],
                   'ACTUAL':[400,400,400,400,500,500,500],
                   'YYYY_MM_DD':['2020-01-01','2020-01-02','2020-01-03','2020-01-04','2020-01-01','2020-01-02','2020-01-03']})


def calculate(item):
    # select name
    data = df[df['Name'] == item]
    # calculate sum
    sum = data['PREDICTED'].sum()

    # remove NaN rows
    data = data.dropna()

    # calculate and insert  month to date column values
    month_to_date = []
    value = 0
    for index, row in data.iterrows():
        value += row['ACTUAL']
        month_to_date.append(value)

    data.insert(3, "MONTH_TO_DATE", month_to_date, True)

    # calculate and instert payout values
    conditions = [
        (data['MONTH_TO_DATE'] < sum),
        (data['MONTH_TO_DATE'] >= sum)
    ]
    choices = [0, ((data['ACTUAL'] - data['PREDICTED'])/100).astype(int)]
    data.insert(5, "PAYOUT", np.select(conditions, choices), True)

    return data


# collect results
results = pd.DataFrame(columns=['Name','PREDICTED','ACTUAL','MONTH_TO_DATE','YYYY_MM_DD','PAYOUT'])

for item in df['Name'].unique():
    df2 = calculate(item)
    results = results.append(df2)

Result:

  Name PREDICTED ACTUAL MONTH_TO_DATE  YYYY_MM_DD PAYOUT
0  Nir       100    400           400  2020-01-01      0
1  Nir       200    400           800  2020-01-02      2
2  Nir       100    400          1200  2020-01-03      3
3  Nir       200    400          1600  2020-01-04      2
4  Xyc       100    500           500  2020-01-01      0
5  Xyc       200    500          1000  2020-01-02      3
6  Xyc       300    500          1500  2020-01-03      2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效比较当月运行总计与当月总计 的相关文章

随机推荐

  • Haskell 集合可以保证每个操作的最坏情况范围?

    这种结构对于实时应用程序 例如用户界面 是必要的 用户并不关心单击按钮是否需要 0 1 秒或 0 2 秒 但他们确实关心第 100 次单击是否会强制执行出色的惰性计算并需要 10 秒才能继续 我在读冈崎的论文纯函数式数据结构 http ww
  • Python 在打印变量后打印文本

    所以我想在打印变量后打印一些文本 如下所示 print Blablabla var blablabla 现在看起来像这样 print The enemey gets hit for d damage 我想在打印损坏变量后打印 Hitpoin
  • ole32!COIDTable::ThreadCleanup 中崩溃 ... NetworkItemFactory!FDBackgroundThreadHandler

    自上周以来 Word 和 Excel 经常崩溃 即使是非常简单的文档也是如此 刚才 火狐也崩溃了 我该如何修复它或找到真正的根本原因 我已经使用安装程序修复了 Office 安装 应安装所有常规更新 笔记本电脑每天都会重新启动 我已经配置了
  • 在 IIS 上启用 SSI

    根据这一页 http msdn microsoft com en us library ms525940 28v vs 90 29 aspx 我应该能够 问 如何在 IIS7 上启用 SSI 编辑 哦 我明白我的问题是什么了 我在 VPS
  • git-diff:不考虑行顺序

    我的存储库中有一个由软件程序生成的文件 该程序有时会重新排序该文件上的行 这并不重要 因为行顺序并不重要 问题是 当执行 git diff 时 很难看出任何内容是否真正发生了变化 无论如何 是否有执行不考虑行顺序的差异 或者 如果 git
  • 如何在 Swift 中获取父 ViewController 的类名?

    有没有办法获取当前 子 父VC的类名UIViewController 我的 孩子 VC 推 有两个 父母 UIViewControllers 所以我想知道哪一位是当前的父母 这是一种方法 if let parentVC parent as
  • Vector3 的纬度和经度未在 3D 球体上对齐

    我正在尝试将纬度和经度转换为 Vector3 格式 对于给定的纬度和经度 我想将其转换为 Vector3 其中标记对象将位于此 Vector3 位置 这是我的代码 void createLand double latitude rad la
  • python中在函数中定义函数有什么好处?

    我遇到了这段python代码 粘贴在下面 effbot http effbot org zone re sub htm unescape html我想知道 为什么要在函数中定义函数 import re htmlentitydefs Remo
  • 为什么同步变更操作时还需要同步HashMap.get(key)?

    我用 get put and clear 多个线程对一个 HashMap 进行操作 put and clear 都在一个里面synchronized阻止但是 get 不是 我无法想象这会导致问题 但在我见过的其他代码中 get 几乎总是同步
  • 创建作业时如何指定 OpenShift 镜像

    在 OpenShift 3 3 下 我尝试使用以下命令创建作业oc命令行工具 显然缺乏对作业创建的基于参数的支持 但我无法理解如何使用现有应用程序的图像流 例如 当我的应用程序进行 S2I 构建时 它会推送到app latest图像流 我希
  • Firebase - 类型错误:路径必须是字符串。收到未定义

    我刚刚开始使用 firebase 我不确定 Firebase 的进出 根据我的模糊理解 我已经这样配置了我的应用程序 在主要Index js文件 我需要 const path require path const firebaseConfi
  • MEAN 堆栈 ng-upload-file

    我目前正在使用MEAN js创建一个应用程序 我脚手架一个简单的实体称为Campaign 我希望每个活动都有一张关联的图片 因此 我想改变CRUD接口能够上传一个文件到后端 我注射了ng 文件上传用于创建 FE 的插件Angular 上No
  • SonarQube 报告中 Kotlin 项目的覆盖率为 0%

    我正在设置通过 SonarQube 服务器分析项目 使用的工具集是 科特林 1 3 61 摇篮6 0 1 雅可可0 7 9 声纳Qube 7 5 SonarQube Gradle 插件 2 7 问题是我在 SonarQube 中有 0 0
  • CMake find_package() 不尊重 CMAKE_MODULE_PATH

    我在 CMake 中检测包 glfw 时遇到问题 由于没有 root 权限 我无法将库安装在标准位置 因此我将其安装在 local反而 ls local lib cmake glfw3 glfw3Config cmake home emil
  • Acumatica 配置向导错误:无法在注册表中获取 IIS 版本

    我尝试在 Acumatica 配置向导上创建一个新实例 我收到一条错误消息 无法从注册表获取您的 IIS 版本 虽然我已经安装了IIS功能 我按照有关在 IIS 上安装哪些功能的说明进行操作 它使用的 net框架是4 6 显然这个问题还没有
  • 在Python中按另一个数组对数组的行进行排序

    我正在尝试按另一个数组的值对一个数组的行进行排序 例如 import numpy as np arr1 np random normal 1 1 80 arr2 np random normal 1 1 80 100 我想排序arr1按降序
  • 升级到 Lion 后如何让 virtualenv 正常工作?

    我刚刚从 SnowLeapord 升级到 Lion 现在无法创建 virtualenv 据我了解 升级后有新的 Python 安装 并且没有站点包 并尝试再次安装 pip 和 virtualenv 以及升级到 Xcode4 但我总是收到此错
  • Twilio PHP API Librarie:警告:file_get_contents():SSL 操作失败,代码为 1

    我通过 Composer 安装了官方 Twilio PHP API Librarie twilio sdk 3 12 当我尝试使用测试凭证使用 API 例如发送短信 时 出现错误 警告 file get contents SSL 操作失败
  • 如何引用两个具有相同名称的不同 DLL?

    我正在开发使用 Matrox Imaging Library MIL 的软件 该软件过去使用MIL 9版本 现在我们升级到v10 由于向后兼容性 我们必须继续支持 v9 使用 MIL 及其 DLL 时存在一些困难 MIL 9 和 MIL 1
  • 有效比较当月运行总计与当月总计

    我有一个数据框 df 它包含predicted模型的每日数据 直至 2020 年底 随着一年中的每一天 actual and id数据被添加到该行 每天有多个名字 NAME ID PREDICTED ACTUAL YYYY MM DD Ni