web-dev-qa-db-ja.com

特定の日付に最も近い日付を見つける

日時オブジェクトの配列があり、配列内のどの要素が特定の日付に最も近いかを見つけたい(例:datetime.datetime(2014,12,16)

This postは、指定された日付の前ではない最も近い日付を見つける方法を示します。特定の日付より前の日付を返すようにこのコードを変更するにはどうすればよいですか?

たとえば、配列に要素datetime.datetime(2014,12,10)およびdatetime.datetime(2014,12,28)が含まれている場合、絶対値でdatetime.datetime(2014,12,16)に最も近いため、前のアイテムが返されます。

31
user3600497

この関数は、日付datetimeに最も近いitemspivotを返します。

def nearest(items, pivot):
    return min(items, key=lambda x: abs(x - pivot))

型が比較、減算、およびdatetimeをサポートしている場合、この関数はabs以外の型でも機能します。例:数値やベクトル型。

69
Tamas Hegedus

このリンク リンクで回答したように、 'truncate'関数があります。

df.truncate(before='2012-01-07')

または、 get_loc と 'nearest'オプションを使用できます。

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]
22
Kevin Zhu
def nearestDate(base, dates):
    nearness = { abs(base.timestamp() - date.timestamp()) : date for date in dates }
    return nearness[min(nearness.keys())]
1
3442

最も近い日付を見つけるにはand timedelta(2つの日付の差)を返します。次のようにしました。

def nearest_date(items,pivot):
    nearest=min(items, key=lambda x: abs(x - pivot))
    timedelta = abs(nearest - pivot)
    return nearest, timedelta

これは、私がしたように、アプリの近さの最小しきい値がある場合に便利です。

1
Mark Matthews

値の代わりに最も近いインデックスを見つけるための私のソリューション

def nearest_ind(items, pivot):
    time_diff = np.abs([date - pivot for date in items])
    return time_diff.argmin(0)
1