Подобный вопрос к этот , но с некоторыми изменениями:
Вместо заполнения пропущенных дат для каждой группы между минимальной и максимальной датой всего столбца, мы должны толькозаполнение дат между минимальным и максимальным значениями для этой группы и вывод данных с последней строкой в каждой группе
Воспроизводимый пример:
x = pd.DataFrame({'dt': ['2016-01-01','2016-01-03', '2016-01-04','2016-01-01','2016-01-01','2016-01-04']
,'amount': [10.0,30.0,40.0,78.0,80.0,82.0]
, 'sub_id': [1,1,1,2,2,2]
})
Визуально:
dt sub_id amount
0 2016-01-01 1 10.0
1 2016-01-03 1 30.0
2 2016-01-04 1 40.0
3 2017-01-01 2 78.0
4 2017-01-01 2 80.0
5 2017-01-04 2 82.0
Вывод мне нужен:
dt sub_id amount
0 2016-01-01 1 10.0
1 2016-01-02 1 10.0
2 2016-01-03 1 30.0
3 2016-01-04 1 40.0
4 2017-01-01 2 80.0
5 2017-01-02 2 80.0
6 2017-01-03 2 80.0
7 2017-01-04 2 82.0
Мы группируем по dt и sub_id.Как вы можете видеть, в sub_id = 1 была добавлена строка для 2016-01-02, и сумма была вменена в 10,0, так как предыдущая строка была 10,0 (Предположим, данные предварительно отсортированы, чтобы включить это).Для sub_id = 2 была добавлена строка для 2017-01-02 и 2017-01-03, а сумма равна 80,0, поскольку это была последняя строка до этой даты.Первая строка для 2017-01-01 также была удалена, потому что мы просто хотим сохранить последнюю строку для каждой даты и sub_id.
Ищем наиболее эффективный способ сделать это, так как реальные данные имеют миллионы строк,У меня есть текущий метод, использующий лямбда-функции и применяющий их к группам sub_id, но я чувствую, что мы могли бы добиться большего успеха.
Спасибо!