Надеюсь, я вас правильно понимаю, и, возможно, есть более простой и простой способ, но вот мои мысли:
data = [['1/1/2018' , 30 , 100 , 4 , 'a'],
['1/1/2018' , 30 , 200 , 8 , 'b'],
['1/1/2018' , 30 , 300 , 20 , 'c'],
['1/1/2018' , 60 , 100 , 9 , 'd'],
['1/1/2018' , 60 , 200 ,19 , 'e'],
['1/1/2018' , 60 , 300 ,33 , 'f'],
['1/1/2018' , 60 , 400 ,50 , 'g'],
['1/2/2018' , 31 , 100 , 3 , 'a'],
['1/2/2018' , 31 , 200 , 7 , 'b'],
['1/2/2018' , 31 , 300 , 20 , 'c'],
['1/2/2018' , 61 , 100 , 8 , 'd'],
['1/2/2018' , 61 , 200 , 17 , 'e'],
['1/2/2018' , 61 , 300 , 30 , 'f']]
df = pd.DataFrame(data=data, columns=['Date','Duration','Item','Value','ID'])
df1 = df.groupby('Date', as_index=False)[['Duration']].max()
df2 = pd.merge(df,df1, how='inner')
#target_value = 19
df2['diff']=(df2.Value-target_value).abs()
result=df2.loc[df2.groupby('Date')['diff'].idxmin()]
В результирующем фрейме данных содержится значение, наиболее близкое к вашему входному значению.,если вам нужен только столбец «ID», тогда
IDresult = result[['ID']]