使用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
相关产品推荐
相关产品推荐

