Вы можете использовать rank
с pivot_table
df.Val=df.Val.rank(ascending=False).astype(int).astype(str)+' Largest Event'
df.pivot_table(index=['ID_1','ID_2'],columns='Val',values='Date',aggfunc='sum').reset_index()
Out[629]:
Val ID_1 ID_2 1 Largest Event 2 Largest Event 3 Largest Event
0 1234 1480 6/13/1970 7/8/1970 6/4/1970
Обновление
df.Val=df.groupby(['ID_1','ID_2']).Val.rank(ascending=False).astype(int).astype(str)+' Largest Event'
df.pivot_table(index=['ID_1','ID_2'],columns='Val',values='Date',aggfunc='sum').reset_index()
Out[673]:
Val ID_1 ID_2 1 Largest Event 2 Largest Event 3 Largest Event \
0 1234 1480 6/13/1970 7/8/1970 6/4/1970
1 5567 1481 11/20/1970 5/25/1970 4/23/1970
2 8799 1482 12/23/1970 4/23/1970 9/26/1970
Val 4 Largest Event
0 4/1/1970
1 None
2 None