IIUC вы можете оставить значение first
или last
для других столбцов, передавая диктант на agg
agg = {'Event_day': 'last', 'timestamp': 'last', 'install': 'last', 'registration': 'sum', 'purchase': 'sum'}
df.groupby('userid').agg(agg).reset_index()
userid Event_day timestamp install registration purchase
0 53200 3/15/2017 3/15/2018 20:14 yes 3 0
1 533211 2/19/2010 1/19/2016 16:53 yes 0 2
2 555221 1/1/1900 1/1/1900 16:12 yes 2 1
Редактировать:
Учитывая, чтонекоторые ответы, возможно, являются правильными, мне интересно сделать тест производительности между ними
Время
dfg1 = df.groupby("userid")["install", "timestamp", "Event_day"].max()
dfg2 = df.groupby("userid").sum()
pd.concat([dfg1, dfg2], axis=1)
38,5 мс ± 393 мкс на цикл (среднее ± стандартное отклонение из 7 прогонов, по 10 циклов в каждом)
first_other_columns = df[['Event_day', 'timestamp', 'install', 'userid']].drop_duplicates(['userid'], keep='first')
grouped = df.groupby(['userid']).sum().reset_index()
pd.merge(grouped, first_other_columns, on=['userid'])
11,3 мс ± 100 мкс на цикл (среднее ± стандартное отклонение из 7 прогонов, по 100 циклов в каждом)
agg = {'Event_day': 'last', 'timestamp': 'last', 'install': 'last', 'registration': 'sum', 'purchase': 'sum'}
df.groupby('userid').agg(agg).reset_index()
6,85 мс ± 62,5 мкс на цикл (среднее ± стандартное отклонение из 7 циклов, по 100 циклов каждый)