Мои данные хранятся в df
. У меня есть несколько users
за group
. Я хочу сгруппировать df
по group
и применить разные функции к разным столбцам. Суть в том, что я хотел бы назначить пользовательские имена новым столбцам во время этого процесса.
np.random.seed(123)
df = pd.DataFrame({"user":range(4),"group":[1,1,2,2],"crop":["2018-01-01","2018-01-01","2018-03-01","2018-03-01"],
"score":np.random.randint(400,1000,4)})
df["crop"] = pd.to_datetime(df["crop"])
print(df)
user group crop score
0 0 1 2018-01-01 910
1 1 1 2018-01-01 765
2 2 2 2018-03-01 782
3 3 2 2018-03-01 722
Я хочу получить среднее значение score
, а минимальное и максимальное значения crop
сгруппированыс помощью group
и присваивайте пользовательские имена каждому новому столбцу. Желаемый результат должен выглядеть следующим образом:
group mean_score min_crop max_crop
0 1 837.5 2018-01-01 2018-01-01
1 2 752.0 2018-03-01 2018-03-01
Я не знаю, как это сделать в однострочном Python. В R я использовал бы data.table
и получил бы следующее:
df[, list(mean_score = mean(score),
max_crop = max(crop),
min_crop = min(crop)), by = group]
Я знаю, что мог бы сгруппировать данные и использовать .agg
в сочетании со словарем. Есть ли альтернативный способ, которым я могу присвоить каждому столбцу имя в этом процессе?