日時オブジェクトの配列があり、配列内のどの要素が特定の日付に最も近いかを見つけたい(例:datetime.datetime(2014,12,16)
)
This postは、指定された日付の前ではない最も近い日付を見つける方法を示します。特定の日付より前の日付を返すようにこのコードを変更するにはどうすればよいですか?
たとえば、配列に要素datetime.datetime(2014,12,10)
およびdatetime.datetime(2014,12,28)
が含まれている場合、絶対値でdatetime.datetime(2014,12,16)
に最も近いため、前のアイテムが返されます。
この関数は、日付datetime
に最も近いitems
のpivot
を返します。
def nearest(items, pivot):
return min(items, key=lambda x: abs(x - pivot))
型が比較、減算、およびdatetime
をサポートしている場合、この関数はabs
以外の型でも機能します。例:数値やベクトル型。
def nearestDate(base, dates):
nearness = { abs(base.timestamp() - date.timestamp()) : date for date in dates }
return nearness[min(nearness.keys())]
最も近い日付を見つけるにはand timedelta(2つの日付の差)を返します。次のようにしました。
def nearest_date(items,pivot):
nearest=min(items, key=lambda x: abs(x - pivot))
timedelta = abs(nearest - pivot)
return nearest, timedelta
これは、私がしたように、アプリの近さの最小しきい値がある場合に便利です。
値の代わりに最も近いインデックスを見つけるための私のソリューション
def nearest_ind(items, pivot):
time_diff = np.abs([date - pivot for date in items])
return time_diff.argmin(0)