我想根据日期范围来过滤数据帧,该日期范围位于该数据帧系列中最大值日期的任一侧。手动输入日期(例如, '2018-01-05',但是当该日期存储在系列对象中时,它将不起作用-而且我太厚了以至于无法找出原因。 我尝试了字符串转换,并从该系列中提取了一个日期作为值,但无济于事。这是一个程式化的版本:
data = {'dates':['2018-01-01','2018-01-02','2018-01-03','2018-01-04','2018-01-05', \
'2018-01-06'],'values':[-20,30,15,10,4,7]}
data = pd.DataFrame(data)
data.dates = pd.to_datetime(data.dates,dayfirst=True)
maxval = data.nlargest(1,'values')
maxdate = maxval.loc[:,'dates']
start_remove = maxdate-timedelta(days=1)
end_remove = maxdate+timedelta(days=1)
data.loc[(data['dates']<start_remove) | (data['dates']>end_remove)]
给出ValueError:只能比较标记相同的Series对象
而:
data.loc[(data['dates']<'2018-01-03) | (data['dates']>'2018-01-05)]
工作正常。
答案 0 :(得分:0)
您可以将Series.idxmax
用于最大values
的索引值:
maxdate = data.set_index('dates')['values'].idxmax()
问题是maxdate
是一个元素Series
而不是标量,可能的解决方案是通过DataFrame.iat
和Index.get_loc
的位置来选择列dates
的位置:< / p>
maxdate = maxval.iat[0, maxval.column.get_loc('dates')]
或通过带有DataFrame.at
的标签选择并获得索引的第一个值:
maxdate = maxval.at[maxval.index[0], 'dates']
print (maxdate)
2018-01-02 00:00:00