获取最接近datetime64的Pandas DF列的值

时间:2016-01-21 16:34:52

标签: python pandas

我正在尝试隔离特定heading值,其中time最接近datetime64 / timedelta值。

DF看起来像这样。

   heading     times
0   270.00     2016-01-20 21:39:31
1     0.00     2016-01-20 21:39:30
2   270.00     2016-01-20 21:34:15
3   293.36     2016-01-20 21:29:00
4    90.00     2016-01-20 21:28:59

我创建了一个timedelta,即times - 10 mins。我想要做的是获得最接近10分钟前的行的heading值,并将其与当前的标题值进行比较。任何想法都将不胜感激。

编辑以解决以下评论。

最终结果是将heading值与任意时间δ的最接近的标题值进行比较(例如,过去10分钟)。

例如,将heading中的row 1值与heading中的row 3值进行比较,因为它最接近10分钟。

1 个答案:

答案 0 :(得分:0)

希望我能够完全按照说明解决这个问题。例如,问题表明目标是获得最接近的值到十分钟之前(即使没有接近该值的值)。我将假设最接近意味着最接近并且不会在一分钟之内进行其他任意截止。

首先,我要从DatetimeIndex

设置times
df.index = pd.DatetimeIndex(df.times)

然后创建你的时间增量:

time_delta = df.index -  pd.Timedelta(minutes=10)

定义一个函数以从索引中获取最接近的时间。这是直接从之前的SO answer

中获取的
def nearestDate(dates, pivot):
    return min(dates, key=lambda x: abs(x - pivot))

创建一个新列,其值为最接近时间到前十分钟的值

df['heading2'] = [df.loc[nearestDate(df.index, e)]['heading'] for e in time_delta]

df

                        heading   times                 heading2
 2016-01-20 21:39:31    270.0     2016-01-20 21:39:31   293.6
 2016-01-20 21:39:30    0.0       2016-01-20 21:39:30   293.6
 2016-01-20 21:34:15    270.0     2016-01-20 21:34:15   90.0
 2016-01-20 21:29:00    293.6     2016-01-20 21:29:00   90.0
 2016-01-20 21:28:59    90.0      2016-01-20 21:28:59   90.0