Один из способов - сначала сгруппировать team_ref
, получить среднее значение num_1-3 и сгруппировать остальные в список. И наконец, объедините их вместе:
import pandas as pd
df = pd.DataFrame({'team_ref': {0: 'a', 1: 'a', 2: 'b', 3: 'b'}, 'num_1': {0: 1, 1: 2, 2: 3, 3: 4}, 'num_2': {0: 1, 1: 2, 2: 1, 3: 2}, 'num_3': {0: 1, 1: 2, 2: 1, 3: 2}, 'matchday': {0: 'A', 1: 'B', 2: 'A', 3: 'B'}, 'match_id': {0: 'AeD', 1: 'AbD', 2: 'AeD', 3: 'AbD'}, 'season_id': {0: 2018, 1: 2018, 2: 2018, 3: 2018}})
grouped = df.groupby('team_ref')
new_df = grouped["num_1","num_2","num_3"].mean().reset_index().merge(
grouped["matchday", "match_id","season_id"].agg(lambda x: x.tolist()).reset_index(),
on="team_ref",how="left")
print (new_df)
#
team_ref num_1 num_2 num_3 matchday match_id season_id
0 a 1.5 1.5 1.5 [A, B] [AeD, AbD] [2018, 2018]
1 b 3.5 1.5 1.5 [A, B] [AeD, AbD] [2018, 2018]