- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Polars 库给我留下了深刻的印象,并试图更好地学习它。 :)
现在,我正在尝试计算 Polars 中数百万行的两个日期之间的天数,但在某些情况下,对于某些行,我需要排除某些工作日。在 Pandas/Numpy 中,我使用了 np.busday_count ,我可以在其中定义一个周掩码,其中计算每个条件的工作日,并在需要时排除假期。
我在快速计算有条件的天数时遇到困难,因为我无法弄清楚如何在表达式中执行此操作。
示例数据框:
df = (pl
.DataFrame({"Market": ["AT", "DE", "AT", "CZ", "GB", "CZ"],
"Service": ["Standard", "Express", "Standard", "Standard", "Standard", "Standard"],
"Day1": ["2022-01-02","2022-01-03", "2022-01-04", "2022-01-05", "2022-01-06", "2022-01-07"],
"Day2": ["2022-01-03","2022-01-04", "2022-01-05", "2022-01-06", "2022-01-07", "2022-01-08"]
}
)
.with_columns(pl.col(["Day1", "Day2"]).str.strptime(pl.Date, "%Y-%m-%d"))
)
我能够通过 struct 和 apply 方法将数据传递给 np.busday_function 。然而,与 Pandas 分配(262 毫秒)相比,真实数据集(34.4 秒)的执行速度要慢得多。
下面是我在 Polars 中想出的代码。我正在寻找一种更快的优化方法。
(df
.with_column(
pl.struct([pl.col("Day1"), pl.col("Day2")])
.apply(lambda x: np.busday_count(x["Day1"], x["Day2"], weekmask='1110000'))
.alias("Result"))
)
编辑,预期输出:
┌────────┬──────────┬────────────┬────────────┬────────┐
│ Market ┆ Service ┆ Day1 ┆ Day2 ┆ Result │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ date ┆ date ┆ i64 │
╞════════╪══════════╪════════════╪════════════╪════════╡
│ AT ┆ Standard ┆ 2022-01-02 ┆ 2022-01-03 ┆ 0 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ DE ┆ Express ┆ 2022-01-03 ┆ 2022-01-04 ┆ 1 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ AT ┆ Standard ┆ 2022-01-04 ┆ 2022-01-05 ┆ 1 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ CZ ┆ Standard ┆ 2022-01-05 ┆ 2022-01-06 ┆ 1 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ GB ┆ Standard ┆ 2022-01-06 ┆ 2022-01-07 ┆ 0 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ CZ ┆ Standard ┆ 2022-01-07 ┆ 2022-01-08 ┆ 0 │
└────────┴──────────┴────────────┴────────────┴────────┘
最佳答案
当您在 select
上下文中使用 apply
时,您将创建一个 Python 字典,并将其提供给列表中每个元素的 lambda。这很贵。
您可以通过使用map
而不是apply来利用矢量化
。这样我们就可以一次将整列发送到 numpys busday_count
。
(df
.with_column(
pl.struct([pl.col("Day1"), pl.col("Day2")])
.map(lambda x: np.busday_count(x.struct["Day1"], x.struct["Day2"], weekmask='1110000'))
.alias("Result"))
)
关于python - 优化 Polars 中具有不同 'weekmask' 逻辑的两个日期之间的 timedelta 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74742904/
将标准 timedelta 字符串转换为 timedelta 对象的最简单方法是什么? 我已经打印了几个 timedelta 对象并得到了这些字符串: '1157 days, 9:46:39' '12
我正在尝试将一个 timedelta 对象与另一个对象相除以计算服务器正常运行时间: >>> import datetime >>> installation_date=datetime.dateti
这里我有一个包含日期、时间和一个输入的数据集。这里我想添加特定时间的 timedelta 并添加到日期时间列。 所以这里首先我将指定时间转换为 00:00:00,它将作为开始时间。从那时起,我想添加一
dta_h 是一个 DataFrame,dta_h.Datetime 看起来像这样: 0 2013-03-01 00:00:00 1 2013-02-28 23:00:00 2 20
我想知道 timedelta 有多少小时在白天和夜晚范围内。 时间开始: >>> dt_start = datetime.datetime(2012, 8, 19, 16, 0) 时间停止: >>>
我的 pandas 数据框中的一列表示我用 datetime 计算的时间增量,然后导出到 csv 并读回 pandas 数据框中。现在该列的 dtype 是对象,而我希望它是一个 timedelta,
这是我的代码: import datetime date = datetime.date(2015,10,1) today = datetime..today() oneday = datetime.
我正在尝试通过包含在同一数据框的另一列中的值来增加 pandas 数据框中的日期,如下所示 loans['est_close_date'] = loans['dealdate'] + loans['t
在我为现有数据库编写的 Web 应用程序中,我需要计算现在和存储在数据库中的时间戳之间的差异(在文本字段中,这很愚蠢,我知道)。这是我的 sqlalchemy Ban 类和相关方法。 class Ba
使用 Python 2.6 给定以下代码行,我如何从数据库中的变量动态构建 timedelta 的值? next_alert_date = datetime.strptime(start_due_da
下面是我正在处理的代码。据我所知,没有问题,但是当我尝试运行这段代码时,我收到了一个错误。 import os import datetime def parseOptions(): impo
例子假设对于一个给定的日期,当我们加上timedelta(days=180),并得到新的日期时,是否考虑闰年并计算新的日期?或者我们是否只计算当前日期的闰年,是否 Feb 有 28/29 天,并在 p
不确定如何处理这个问题。 用户提供一个参数,即 program.exe '2001-08-12' 我需要为该参数添加一天 - 这将代表程序另一部分的日期范围。我知道您可以从当天添加或减去,但如何从用户
我正在解决 Exercism.io 千兆秒问题: “计算某人活了 10^9 秒的时刻。” 我的方法是将 datetime 输入转换为时间戳,添加 10**9,然后转换回来。我的答案非常接近,但测试套件
我有一个大型数据库,正在加载到内存缓存中。我有一个过程可以每天迭代数据。 最近这个过程已经开始抛出以下错误: OverflowError: date value out of range对于线 sta
我有一个 时间值(value)存放在一个名为 newTime 的变量中. 当打印 newTime它给了我这样的结果 newTime = 0:07:00女巫很棒,因为我喜欢那样。 但是当保存 newTi
我有一些数据系列,这是一种 timedelta 数据类型。我想将这些 timedelta 绘制成条形图,其中 y 轴应仅以小时为单位而不是其他格式进行标记。以前,当我在 matplotlib 中尝试绘
菜鸟在这里, 我一直试图将军事时间的用户输入呈现为标准时间。代码到目前为止有效,但我需要从结束时间减去 12 小时才能在标准时间显示。我如何使用 datetime.time 做到这一点?另外,我是否需
我有一个 timedelta 数据框 JC time 1 3days 21:02:05 2 1days 23:50:07 3 6days 19:28:36 但我想要 1 93:02:05 2 47:5
我需要在表的一列中保存时间间隔。基于:http://docs.sqlalchemy.org/en/rel_0_8/core/types.html 我可以用 Interval键入。我的数据库是SQLit
我是一名优秀的程序员,十分优秀!