обновленная попытка
Если вы хотите ежегодную повторную выборку, то вот моя попытка, но результат не похож на ваш ожидаемый ответ
Генерация данных
d = [['id', 'date', 'value'],
[1, '2016-12-1', 9],
[1, '2016-12-1',8],
[1, '2017-1-1',18],
[2, '2017-3-4',19],
[2, '2017-3-4',20],
[1,'2017-4-3',21],
[2, '2017-7-13',12],
[3, '2017-8-9',12],
[2, '2017-9-12',11],
[1, '2017-11-12',19],
[3, '2017-11-12',21],]
df = pd.DataFrame(d[1:], columns=d[0])
print(df)
id date value
0 1 2016-12-1 9
1 1 2016-12-1 8
2 1 2017-1-1 18
3 2 2017-3-4 19
4 2 2017-3-4 20
5 1 2017-4-3 21
6 2 2017-7-13 12
7 3 2017-8-9 12
8 2 2017-9-12 11
9 1 2017-11-12 19
10 3 2017-11-12 21
Попытка ежегодной повторной выборки с последующей суммой
df.index = pd.to_datetime(df.date)
df.drop('date',axis = 1, inplace = True)
df_g = df.groupby('id').resample('y').sum()
df_g.drop(columns=['id'], inplace=True)
print(df_g)
value
id date
1 2016-12-31 17
2017-12-31 58
2 2017-12-31 62
3 2017-12-31 33
ПЕРВОНАЧАЛЬНЫЙ ответ
Вы можете сделать это, но он не выполняет явную resample
операцию
f = {'date':['min','max'],
'value':'sum'}
df_grouped = df.groupby(['id']).agg(f)
df_grouped.columns = ['_'.join(col) for col in df_grouped.columns.values]
df_grouped.reset_index(drop=False, inplace=True)
print(df_grouped)
id date_min date_max value_sum
0 1 16-12-1 17-4-3 75
1 2 17-3-4 17-9-12 62
2 3 17-11-12 17-8-9 33