Контекст:
Столбцы моего фрейма данных: идентификаторы (с дубликатами) в A
, значения времени B
и строковые значения C
Мне нужно обновить все значения C
, где C
соответствует самому последнему времени B
для каждого идентификатора A
.
Показывает последнее время для идентификатора (или группы идентификаторов), но не включает значения C:
df.groupby(['A'], as_index=False)['B'].max()
Моя неудачная попытка после того, как я наткнулся на .transform()
:
df['C'] = df.groupby('A')['B'].transform(['C'].max())
AttributeError: 'list' object has no attribute 'max'
Данные
'a':['zx5','zx5','ab1','ab1','mn3','mn3'],
'b':['1/1/2021','1/2/2021','1/3/2021','1/4/2021','1/5/2021','1/4/2021'],
'c':['aaa','bbb','ccc','ddd','eee','fff']
Желаемый результат:
'a':['zx5','zx5','ab1','ab1','mn3','mn3'],
'b':['1/1/2021','1/2/2021','1/3/2021','1/4/2021','1/5/2021','1/4/2021'],
'c':['bbb','bbb','ddd','ddd','eee','eee']
Если применимо, я ищу эффективное решение, поскольку оно состоит из CSV-файлов с более чем 100 000 строк данных.
Изменить: Из-за комментариев я обновил идентификаторы (A), чтобы они были менее упрощенными, рассматривая их как случайные буквенно-цифровые значения, где сортировка не дает преимуществ
Это вполне нормально, что преобразование выполняется быстрее, оно должно проходить по строкам только один раз ;) Просто подумал об этом после того, как вы опубликовали
@HenryEcker ValueError: невозможно выполнить переиндексацию с повторяющейся оси
Я не понимаю этого с предоставленными образцами данных. Можете ли вы предоставить образец, который делает?
@HenryEcker df.reset_index(inplace=True) исправил мою проблему, tyvm