使用 Polars 生成运行记录,其中一个月的期末余额将成为下个月的期初余额

2023-12-25

我想在给定初始期初余额的情况下生成一段时间内的运行计数模拟。例如,一个虚构的企业从 1000 美元开始,在任何一个月内都会经历随机的盈利和亏损。 12 个月后,这家企业可能会赚多少钱? 我的问题是,我可以生成所需的列,但无法弄清楚如何在不破坏当月数据的情况下将模拟计数延续到下个月。

我可以创建一个 Polars 数据框,并用所需的损益列填充该数据框,并生成期末余额。 使用堆叠的“with_columns()”,我为期初余额和期末余额创建了所需的列,然后生成一些随机利润和损失,然后更新期末余额。但我无法让这件事继续下去。

import polars as pl
import datetime as dt
from dateutil.relativedelta import relativedelta
start_date = dt.date.today() + relativedelta(months=1, day=1)
df = pl.DataFrame(
    pl.date_range(start_date, start_date + relativedelta(months=5), '1mo').alias('date'),
)
beginning_balance = 1000.0
df = df.with_columns(
        pl.lit(beginning_balance).alias('beginning_balance'),
        pl.lit(beginning_balance).alias('closing_balance'),
).with_columns(
    [
        pl.when(pl.col('date') == start_date)
        .then(pl.col('beginning_balance'))
        .otherwise(pl.col('closing_balance').shift(1))
        .alias('beginning_balance'), 
        pl.Series([normalvariate(100, 80) for _ in range(len(df))]).round(2).alias('profit'),
        pl.Series([normalvariate(100, 75) for _ in range(len(df))]).round(2).alias('loss'),
    ]
).with_columns(
    (pl.col('beginning_balance') + pl.col('profit') - pl.col('loss')).alias('closing_balance'),
)
df

导致 :

 shape: (6, 5)
date    beginning_balance   closing_balance     profit  loss
date    f64     f64     f64     f64
2023-04-01  1000.0  909.61  72.97   163.36
2023-05-01  1000.0  1072.29     212.84  140.55
2023-06-01  1000.0  974.54  82.75   108.21
2023-07-01  1000.0  824.08  -60.69  115.23
2023-08-01  1000.0  940.71  155.6   214.89
2023-09-01  1000.0  994.5   94.23   99.73

请注意,第一个月的期末余额 (909.61) 并未转入下个月,下个月仍为 1000.00,因此不会发生运行计数。

我绝对可以使用循环(for 或 while)来遍历每一行,但这会阻碍 Polars 的优化和并行化。以下方法可以工作,但速度要慢得多(特别是当我运行许多具有更详细计算的模拟时)。

current_tally = beginning_balance
for t in range(len(df)):
    beginning_balance = current_tally
    current_tally = beginning_balance + df[t, 'profit'] - df[t, 'loss']
    df[t, 'beginning_balance'] = beginning_balance
    df[t, 'closing_balance'] = current_tally

df
 shape: (6, 5)
date    beginning_balance   closing_balance     profit  loss
date    f64     f64     f64     f64
2023-04-01  1000.0  1063.13     115.49  52.36
2023-05-01  1063.13     1224.37     184.62  23.38
2023-06-01  1224.37     1258.02     114.68  81.03
2023-07-01  1258.02     1323.73     239.12  173.41
2023-08-01  1323.73     1341.33     102.18  84.58
2023-09-01  1341.33     1329.88     19.9    31.35

我该怎么做within Polars?


我认为替代解决方案更有效(因为.cumulative_eval多次进行大量添加):

开始数据框date和随机的profit and loss:

import polars as pl
import datetime as dt
from dateutil.relativedelta import relativedelta

num_months = 6
start_date = dt.date.today() + relativedelta(months=1, day=1)
df = pl.DataFrame().with_columns([
    pl.date_range(start_date, start_date + relativedelta(months=num_months - 1), '1mo').alias('date'),
    pl.Series([normalvariate(100, 80) for _ in range(num_months)]).round(2).alias('profit'),
    pl.Series([normalvariate(100, 75) for _ in range(num_months)]).round(2).alias('loss'),
])

基于列构建新列profit and loss:

beginning_balance = 1000.0
df = df.with_columns(
    (beginning_balance + (pl.col('profit') - pl.col('loss')).cumsum())
    .alias('closing_balance')
).with_columns(
    pl.col('closing_balance').shift_and_fill(1, beginning_balance)
    .alias('beginning_balance')
)

The tally通过使用计算.cumsum()关于之间的区别profit and loss.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Polars 生成运行记录,其中一个月的期末余额将成为下个月的期初余额 的相关文章

  • 如何实现 __eq__ 进行集合包含测试?

    我遇到了一个问题 我将一个实例添加到一个集合中 然后进行测试以查看该对象是否存在于该集合中 我已经覆盖了 eq 但在包含测试期间不会调用它 我必须覆盖吗 hash 反而 如果是这样 我将如何实施 hash 鉴于我需要对元组 列表和字典进行哈
  • Django 中的 Rpy2 错误 - 未为“”类型的对象定义转换“py2rpy”

    我以前从未使用过 R 并且正在尝试使用 rpy2 从 python 调用 R 函数 它可以在独立的 python 终端上运行 但不能在 Django 中运行 但rpy2似乎无法将python字符串转换为r对象 我正在使用同事提供的自定义库
  • 如何使用 conda 在一行中安装多个包?

    我需要使用 conda 安装以下多个软件包 我不确定 conda forge 是什么 有些使用 conda forge 有些不使用它 是否可以将它们安装成一行而不需要一一安装 谢谢 conda install c conda forge d
  • 以矢量化方式在另一个 DataFrame 中查找包含值子集的行

    如何匹配此 DataFrame 中的值source car id lat lon 0 100 10 0 15 0 1 100 12 0 10 0 2 100 09 0 08 0 3 110 23 0 12 0 4 110 18 0 32 0
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • Pandas 连接问题:列重叠但未指定后缀

    我有以下数据框 print df a mukey DI PI 0 100000 35 14 1 1000005 44 14 2 1000006 44 14 3 1000007 43 13 4 1000008 43 13 print df b
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • 使用 pandas 将字符串对象转换为 int/float

    import pandas as pd path1 home supertramp Desktop 100 life 180 data csv mydf pd read csv path1 numcigar Never 0 1 5 Ciga
  • 通用详细视图 ProfileView 必须使用对象 pk 或 slug 调用

    我是 Django 2 0 的新手 在访问我的个人资料页面视图时收到此错误 它适用于像这样的网址path users
  • 返回上个月的日期时间对象

    如果 timedelta 在它的构造函数中有一个月份参数就好了 那么最简单的方法是什么 EDIT 正如下面指出的那样 我并没有认真考虑这一点 我真正想要的是上个月的任何一天 因为最终我只会获取年份和月份 因此 给定一个日期时间对象 返回的最
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • 根据第三个变量更改散点图中的标记样式

    我正在处理多列字典 我想绘制两列 然后根据第三列和第四列更改标记的颜色和样式 我很难改变 pylab 散点图中的标记样式 我的方法适用于颜色 不幸的是不适用于标记样式 x 1 2 3 4 5 6 y 1 3 4 5 6 7 m k l l
  • 用于多个窗口的 Tkinter 示例代码,为什么按钮无法正确加载?

    我正在编写一个程序 应该 按一下按钮即可打开一个窗口 按另一个按钮关闭新打开的窗口 我使用类 以便稍后可以将代码插入到更大的程序中 但是 我无法正确加载按钮 import tkinter as tk class Demo1 tk Frame
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • 在 matplotlib 中绘制多边形的并集[重复]

    这个问题在这里已经有答案了 我正在尝试绘制几个多边形的并集matplotlib 具有一定的 alpha 水平 我当前的代码在交叉点处颜色较深 有没有办法让交叉路口与其他地方的颜色相同 import matplotlib pyplot as
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session

随机推荐

  • Android 应用程序正在安装两个启动器图标

    This is not的副本Android 应用程序创建两个启动器图标 https stackoverflow com questions 8697943 android application creating two launcher
  • 如何从我们的 Android 应用程序中删除其他应用程序缓存?

    我正在尝试开发一个可以删除其他应用程序缓存数据的Android应用程序 我尝试浏览所有博客 但没有一个对我有用 我可以通过以下代码清除我的应用程序的缓存 File cache getCacheDir File appDir new File
  • 用户警告的堆栈跟踪

    我在日志中看到这样的警告 py warnings init WARNING bs4 init py 219 UserWarning foo looks like a filename not markup You should probab
  • func 中返回空,golang 中返回值[重复]

    这个问题在这里已经有答案了 我正在阅读一些编写的代码Golang在Github上发现了一段非常有趣的代码 我把它简化得更清楚了 func Insert docs interface err error for i 0 i lt 3 i er
  • Android SDK-camera2-在TextureView上绘制矩形

    我是 android 开发的新手 我发现很难在camera2 api 上找到好的例子 我慢慢地解决了大多数问题 但在这个问题上我陷入了困境 在默认相机中 当您触摸屏幕进行对焦时 屏幕会短暂显示一个矩形的对焦区域 我想做类似的事情 或者在这种
  • 组合两个 foreach 循环

    我有两个 foreach 循环 第一个 foreach items as key gt item keywords explode qsvarus title key preg replace b implode keywords b lt
  • 使用 Pandas 读取 GPS RINEX 数据

    我正在阅读 RINEX 3 02 第 60 页 观测数据文件来进行一些基于时间的卫星 ID 过滤 并最终将在稍后重建它 这将使我能够更好地控制卫星的选择 随着时间的推移 我可以通过 RTK 后处理为位置解决方案做出贡献 不过 特别是对于这一
  • 当用户关闭 Chrome 时关闭 Native Host

    我正在开发一个使用 C 本机主机的 Chrome 扩展 在background js 脚本 持久设置为 false 中 我使用 chrome onstartup 事件创建与 C 主机的连接 我希望只要用户积极使用 Chrome 我的主机就能
  • 关闭QMainWindow的正确方法

    我最近从 tkinter 更改为 Pyqt5 因为我正在 Python 3 7 8 中开发一个半大型应用程序 每次我不得不关闭窗口时我都会使用该方法self destroy 并且有一个很小的机会 当我关闭所有程序并且没有窗口时 解释器仍在运
  • 如何设置可跨文本视图之间的边距?

    我正在尝试创建可扩展的文本视图并在 EditText 中显示它 因此 用户可以在 EditText 中输入一些内容 如果用户按下键盘的 Enter 按钮 那么我会将此文本转换为可跨文本视图 此用户可以再次开始输入并按键盘的 Enter 按钮
  • Lucene:从索引中删除,基于多个字段

    我需要从 lucene 搜索索引中删除文档 标准方法 indexReader deleteDocuments new Term field name field value 不会成功 我需要根据多个字段执行删除 我需要这样的东西 pseud
  • 如何仅向 NSDate 添加工作日?

    我有一个与 Objective C 中计算工作日相关的问题 我需要添加X给定的工作日NSDate 例如 如果我有一个约会 2010 年 10 月 22 日星期五 我添加2工作日 我应该得到 2010 年 10 月 26 日星期二 提前致谢
  • 如何在 Android 中从 ArrayList 填充的列表视图中选择多个项目

    我正在尝试编写一个程序来选择我填充的列表视图中的多个项目 但我很难选择多个项目 请让我知道该怎么做 下面是我填充数组列表的方式 并且我有一个带有复选框的自定义行 我需要在按钮单击事件上获取所选项目 名称 编号 先感谢您 我试图理解其他帖子
  • Laravel 子域路由不起作用

    我正在尝试拥有一个管理子域 像这样 https laravel com docs 5 1 routing route group sub domain routing Route group domain gt admin localhos
  • HikariCP 和 maxLifetime

    我将我的项目移至HikariCP https github com brettwooldridge HikariCP 到目前为止一切都很顺利 但在一种设置下我遇到了麻烦 这是 setMaxLifetime 30 1000 HikariCon
  • 使用资源中的几何图形的 WPF 自定义按钮

    有没有办法使用这样的 PathGeometry 集合 路径1 F1 中号 170 255 178 837L 170 255 221 158C 170 255 228 917 164 174 230 777 156 745 225 286L
  • 如何处理 AJAX 中的预期错误(包括向用户公开它们)

    预期错误是我在代码中预期甚至自己提出的来自服务器的错误 例如 当用户尝试执行他没有足够权限的操作时 我会提出PermissionError 一个习俗Exception 并带有描述错误的消息 我一直在寻找一种好方法来处理 AJAX 情况下的预
  • 如何以声明方式管理 Kafka 主题?

    我们正在使用 Apache Kafka 并且有很多手动创建的主题 使用自定义主题配置 我们希望像代码一样管理我们的主题 就像我们的基础设施 配置的其余部分一样 我们如何以编程方式和声明方式管理我们的主题 什么是理智的方法 以下是可能适合您正
  • Rails:PG :: UndefinedTable:错误:关系“...”不存在

    迁移时我收到以下错误消息 PG UndefinedTable ERROR relation actioncodes does not exist ALTER TABLE organizations ADD CONSTRAINT fk rai
  • 使用 Polars 生成运行记录,其中一个月的期末余额将成为下个月的期初余额

    我想在给定初始期初余额的情况下生成一段时间内的运行计数模拟 例如 一个虚构的企业从 1000 美元开始 在任何一个月内都会经历随机的盈利和亏损 12 个月后 这家企业可能会赚多少钱 我的问题是 我可以生成所需的列 但无法弄清楚如何在不破坏当