如果在日期范围内,请选择行

时间:2018-03-14 08:05:54

标签: python pandas

我有以下数据框。

df = pd.DataFrame({'Date': ['01/12/2017', '01/01/2018',' 01/02/2018', '01/03/2018'], 'Output': [17, 16, 4, 21]})

我希望能够从上面的数据框中获取最新的“输出”数字,具体取决于具体的日期。 e.g

Date           Output
24/12/2017     17
13/01/2018     16
21/01/2018     16
14/02/2018     4
13/03/2018     21

我看过按日期范围切片,但几乎与此相反。

1 个答案:

答案 0 :(得分:1)

如果Date列未排序,请merge_asofsort_values一起使用:

print (df)
         Date
0  24/12/2017
1  13/01/2018
2  21/01/2018
3  14/02/2018
4  13/03/2018

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
df1 = pd.DataFrame({'Date': ['01/12/2017', '01/01/2018',' 01/02/2018', '01/03/2018'], 
                    'Output': [17, 16, 4, 21]})
df1['Date'] = pd.to_datetime(df1['Date'], dayfirst=True)
print (df1)
        Date  Output
0 2017-12-01      17
1 2018-01-01      16
2 2018-02-01       4
3 2018-03-01      21

#if necessary sort DataFrames by Dates
df = df.sort_values('Date')
df1 = df1.sort_values('Date')

df2 = pd.merge_asof(df, df1, on='Date')
print (df2)
        Date  Output
0 2017-12-24      17
1 2018-01-13      16
2 2018-01-21      16
3 2018-02-14       4
4 2018-03-13      21