





Просто сгруппируйте по идентификатору, суммируйте и подсчитайте их, а затем просто разделите друг друга, например:
new_df = df.groupby("ID", as_index=False).agg({'val': ['sum', 'count']})
Тогда вам нужно только
new_df["val"] = new_df["sum"]/new_df["count"]
Простой способ — сгруппировать по ID и взять среднее значение столбца val:
print(df.groupby("ID").agg({"val": "mean"}).reset_index())
# ID val
#0 a 0.333333
#1 b 0.500000
Или более кратко, как указано @АлексРили:
df.groupby('ID', as_index=False).mean()
Или же (чтобы избежать agg и reset_index()) вы можете написать df.groupby('ID', as_index=False).mean()
Хорошо, пожалуйста, предоставьте код из ваших попыток. Что пошло не так, были ли ошибки?