gpt4 book ai didi

python - 仅使用现有日期列中的日期时间对新 pandas 列进行矢量化计算

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:42 25 4
gpt4 key购买 nike

我有:

  • 一个 pandas 数据框,其中一列包含日期
  • Python 3.6

我想要什么:

  • 计算一个新列,其中每行的新值仅取决于同一行现有列中日期的一部分(例如,仅取决于日期的小时的运算)
  • 以高效的方式(思考、矢量化)执行此操作,而不是逐行计算。
<小时/>

示例数据框(小数据框便于打印,但我也有一个带有较大数据框的实际用例,我无法共享该数据框,但可以用于计时不同的解决方案):

import numpy as np
import pandas as pd
from datetime import datetime
from datetime import timedelta

df = pd.DataFrame({'Date': np.arange(datetime(2000,1,1),
datetime(2000,1,2),
timedelta(hours=3)).astype(datetime)})
print(df)

这给出:

                 Date
0 2000-01-01 00:00:00
1 2000-01-01 03:00:00
2 2000-01-01 06:00:00
3 2000-01-01 09:00:00
4 2000-01-01 12:00:00
5 2000-01-01 15:00:00
6 2000-01-01 18:00:00
7 2000-01-01 21:00:00
<小时/>

现有解决方案(太慢):

df['SinHour'] = df.apply(
lambda row: np.sin((row.Date.hour + float(row.Date.minute) / 60.0) * np.pi / 12.0),
axis=1)
print(df)

这给出:

                 Date       SinHour
0 2000-01-01 00:00:00 0.000000e+00
1 2000-01-01 03:00:00 7.071068e-01
2 2000-01-01 06:00:00 1.000000e+00
3 2000-01-01 09:00:00 7.071068e-01
4 2000-01-01 12:00:00 1.224647e-16
5 2000-01-01 15:00:00 -7.071068e-01
6 2000-01-01 18:00:00 -1.000000e+00
7 2000-01-01 21:00:00 -7.071068e-01

我说这个解决方案太慢了,因为它逐行计算列中的每个值。当然,如果这真的是唯一的可能性,我就只能这样了。然而,对于更简单的函数,我通过使用向量化 numpy 函数获得了巨大的加速,我希望这也能以某种方式实现。

<小时/>

所需解决方案的方向(不起作用):

我希望能够做这样的事情:

df = df.assign(
SinHour=lambda data: np.sin((data.Date.hour + float(data.Date.minute) / 60.0)
* np.pi / 12.0))

这是我希望进入的方向,因为它不再是逐行应用。但是,它显然不起作用,因为它无法以“矢量化”方式一次性访问整个 Date 列的 hourmin 属性。

最佳答案

你真的很接近,只需要 .dt 来处理 datetimeSeries 和 Actor astype :

df = df.assign(SinHour=np.sin((df.Date.dt.hour + 
(df.Date.dt.minute).astype(float) / 60.0) * np.pi / 12.0)
)
print(df)
Date SinHour
0 2000-01-01 00:00:00 0.000000e+00
1 2000-01-01 03:00:00 7.071068e-01
2 2000-01-01 06:00:00 1.000000e+00
3 2000-01-01 09:00:00 7.071068e-01
4 2000-01-01 12:00:00 1.224647e-16
5 2000-01-01 15:00:00 -7.071068e-01
6 2000-01-01 18:00:00 -1.000000e+00
7 2000-01-01 21:00:00 -7.071068e-01

关于python - 仅使用现有日期列中的日期时间对新 pandas 列进行矢量化计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com