Pandas df 具有一致 timedelta 的圆形日期时间

问题描述 投票:0回答:1

如何舍入到最接近的整分钟而不重复。我拥有的数据在条目之间没有 100% 准确的时间增量。

例如我有

数据1 2023-12-10T20:01:00.58Z

数据2 2023-12-10T20:02:00.58Z

数据3 2023-12-10T20:02:59.62Z

此处四舍五入时,我们得到 20:01、20:02、20:02

那么为什么不四舍五入到最接近的分钟呢?因为可能有这样的时间戳:
20:01:29、20:02:29、20:03:31、20:04:31 这将导致 20:01、20:02、20:04、20:05。

但我希望结果在时间增量上保持一致。

我一直都知道,对于我拥有的一个数据系列,时间戳始终以秒为中心。这意味着,不可能有像第一个例子和第二个例子一样的想法。

玩耍:

import pandas as pd
import plotly.express as px

# Creating a pandas DataFrame
data = {'data1': ['2023-12-10T20:01:00.58Z'],
        'data2': ['2023-12-10T20:02:00.58Z'],
        'data3': ['2023-12-10T20:02:59.62Z']}

df = pd.DataFrame(data)

# Converting the string columns to datetime
df['data1'] = pd.to_datetime(df['data1'])
df['data2'] = pd.to_datetime(df['data2'])
df['data3'] = pd.to_datetime(df['data3'])

我想要对日期时间字段进行四舍五入,同时保持 1 分钟的增量。

pandas datetime rounding
1个回答
0
投票

IIUC,您可以计算连续值的

diff
,然后计算
round
cumsum
并添加到舍入的第一个值:

delta = df.iloc[0].diff().fillna('0').dt.round(freq='1min').cumsum()
df.iloc[0] = delta.add(df.iat[0, 0].round('1min'))

注意。这是假设值已排序。如果没有,请使用

.sort_values().diff()
代替
.diff()

输出:

                      data1                     data2                     data3
0 2023-12-10 20:01:00+00:00 2023-12-10 20:02:00+00:00 2023-12-10 20:03:00+00:00
© www.soinside.com 2019 - 2024. All rights reserved.