Я считаю, что вам нужно DataFrame.resample
с совокупностью first
и last
:
df1 = df.resample('W', on='Date')['Open'].agg(['first','last'])
df2 = df.resample('M', on='Date')['Open'].agg(['first','last'])
df3 = df.resample('Q', on='Date')['Open'].agg(['first','last'])
df4 = df.resample('6M', on='Date')['Open'].agg(['first','last'])
df5 = df.resample('Y', on='Date')['Open'].agg(['first','last'])
РЕДАКТИРОВАТЬ:
print (df)
Date Open
0 2002-05-23 1.1
1 2002-05-24 1.2
2 2002-05-28 1.3
3 2002-05-29 1.4
4 2002-05-30 1.5
5 2002-05-31 1.6
6 2002-06-01 1.7
7 2002-06-02 1.8
8 2002-06-03 1.9
9 2002-06-04 2.0
df['Date'] = pd.to_datetime(df['Date'])
df1 = df.resample('W', on='Date')['Open'].agg(['first','last'])
print (df1)
first last
Date
2002-05-26 1.1 1.2
2002-06-02 1.3 1.8
2002-06-09 1.9 2.0
df1 = df.set_index('Date').resample('W')['Open'].agg([('First date', lambda x: x.index[0]),
('Last date', lambda x: x.index[-1]),
('First value','first'),
('Last value','last')])
print (df1)
First date Last date First value Last value
Date
2002-05-26 2002-05-23 2002-05-24 1.1 1.2
2002-06-02 2002-05-28 2002-06-02 1.3 1.8
2002-06-09 2002-06-03 2002-06-04 1.9 2.0