gpt4 book ai didi

python - 根据日期列表计算日期时间

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

早上好。

我的问题如下:我有一个 pandas 数据框,其中有一个名为“fecha”的列,用于存储日期对象以及存储初始日期时间和最终日期时间的元组列表。显示以下示例:

df = 
fecha
0 2018-10-01
1 2019-01-12
2 2018-12-25

list_ranges = [(datetime.datetime(2018, 10, 1, 0, 0),
datetime.datetime(2018, 10, 15, 0, 0)),
(datetime.datetime(2018, 10, 16, 0, 0),
datetime.datetime(2018, 10, 31, 0, 0)),
(datetime.datetime(2018, 11, 1, 0, 0), datetime.datetime(2018, 11, 15, 0, 0)),
(datetime.datetime(2018, 11, 16, 0, 0),
datetime.datetime(2018, 11, 30, 0, 0)),
(datetime.datetime(2018, 12, 1, 0, 0), datetime.datetime(2018, 12, 15, 0, 0)),
(datetime.datetime(2018, 12, 16, 0, 0),
datetime.datetime(2018, 12, 31, 0, 0)),
(datetime.datetime(2019, 1, 1, 0, 0), datetime.datetime(2019, 1, 15, 0, 0))]

我想获取每个日期在列表中的范围的位置。我正在寻找的结果是:

df = 
result
0 1
1 7
2 6

目前,我正在这样做:

df.fecha = df.fecha.apply(lambda x: select_quincena(x, quincenas))

def select_quincena(fecha, quincenas):

fecha = datetime.datetime.combine(fecha, datetime.datetime.min.time())
num = 0

for e in quincenas:
num += 1

if fecha >= e[0] and fecha <= e[1]:

return num

它工作正常,但我很确定有更好、更简单的方法来做到这一点。

提前非常感谢您。

最佳答案

使用pd.to_datetime不是datetime模块

首先将您的系列转换为 Pandas 日期时间:

df['fecha'] = pd.to_datetime(df['fecha'])

使用pd.cut分类

这是一个分箱问题。您可以使用 pd.cut 获得矢量化解决方案:

import numpy as np
from operator import itemgetter

dates = pd.to_datetime([list_ranges[0][0], *map(itemgetter(1), list_ranges)]).values
labels = np.arange(1, len(dates))

df['result'] = pd.cut(df['fecha'].values, bins=dates, labels=labels, include_lowest=True)

print(df)

fecha result
0 2018-10-01 1
1 2019-01-12 7
2 2018-12-25 6

相关:Filtering and creating a column based on the date column

使用np.searchsorted对于整数标签

在这种情况下也可以使用二分搜索来查找所需的插入点。这在 np.searchsorted 中得到了有效实现。

df['result'] = np.searchsorted(dates, df['fecha'].values, side='right')

处理无法转换数组数据错误

以上内容经过测试可在 Pandas 0.23.4/NumPy 1.15.1 上运行。对于其他版本,类型比较可能不一致。在这种情况下,您可以将 datetime 数组转换为整数,方法是将 .values 的每次提取替换为 .values.astype('datetime64[D]').astype (整数)

相关:Cannot cast array data from dtype('M8-ns') to dtype('float64') according to the rule 'safe' .

关于python - 根据日期列表计算日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266475/

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