You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas保留与rounded datetime最接近的datetime行

解决Pandas中保留与rounded_time最接近的行的问题

核心思路是先计算每行time(对应示例中的time_index)与rounded_time(示例中的rounded_datetime)的时间差绝对值,再按rounded_time分组,筛选出每组内时间差最小的行。

具体实现代码

import pandas as pd

data = {
    'time_index': ['2022-06-06 08:59:04', '2022-06-06 09:00:00', '2022-06-06 09:30:00'],
    'time': [1, 2, 3],
    'rounded_datetime': ['2022-06-06 09:00:00', '2022-06-06 09:00:00', '2022-06-06 09:29:39']
}

df = pd.DataFrame(data)
df['time_index'] = pd.to_datetime(df['time_index'])
df['rounded_datetime'] = pd.to_datetime(df['rounded_datetime'])

# 计算时间差绝对值
df['time_diff'] = abs(df['time_index'] - df['rounded_datetime'])

# 按rounded_datetime分组,筛选每组时间差最小的行
filtered_df = df.loc[df.groupby('rounded_datetime')['time_diff'].idxmin()]

# 可选:删除临时的time_diff列
filtered_df = filtered_df.drop('time_diff', axis=1)

print(filtered_df)

代码说明

  • abs(df['time_index'] - df['rounded_datetime']):计算两个datetime列的时间差并取绝对值,确保差值为正,方便后续比较。
  • df.groupby('rounded_datetime')['time_diff'].idxmin():按rounded_datetime分组,找到每组中time_diff最小的行的索引。
  • df.loc[...]:通过索引筛选出目标行,得到最终结果。

运行代码后,示例中第一行会被移除,仅保留与2022-06-06 09:00:00时间差为0的第二行,以及无重复rounded_datetime的第三行。

内容的提问来源于stack exchange,提问作者John Doyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:17:14