Как насчет этого?Использует понимание списка, так как Pandas DF не подходит для работы с множествами (и именно в этом заключается эта проблема).
df = pd.DataFrame([
[1, 2017, 'a', 'b'],
[1, 2018, 'a', 'b'],
[1, 2019, 'a', 'c'],
[2, 2017, 'a', 'b'],
[2, 2018, 'c', 'd'],
[3, 2018, 'd', 'd'],
], columns=['id', 'date', 'reserved', 'drove'])
list_of_sets = [(v[0], v[1], {v[2], v[3]}) for v in df.values]
sorted_list = sorted(list_of_sets) # not necc if sorted before
result = pd.DataFrame([
(info[0], info[1], len(info[2].union(sorted_list[i-1][2])))
if info[0] == sorted_list[i-1][0]
else (info[0], info[1], len(info[2]))
for i, info in enumerate(sorted_list)
], columns=['id', 'date', 'count'])