#pandas
Вопрос:
У меня есть df:
score created_at
0 0.00 2021-04-04 08:28:08
1 0.25 2021-04-04 08:18:03
2 -0.20 2021-04-04 08:09:54
3 0.15 2021-04-03 06:08:55
4 0.19 2021-04-03 06:08:55
Я хотел бы сгруппировать результаты по дате, создав средний балл за каждый день. Например, сгруппируйте все оценки за дату 2021-04-04 (которые равны 0,00,0,25 и-0,2) и создайте и усредните, что в этом случае будет 0,01666.
Таким образом, мой желаемый вывод нового фрейма данных будет выглядеть следующим образом:
date average_score
2021-04-03 0.01666
2021-04-04 0.17000
Ответ №1:
пробовать:
df['created_at']=pd.to_datetime(df['created_at'])
#Ensure that 'created_at' is of dtype datetime
Окончательно:
out=df.groupby(df['created_at'].dt.date)['score'].mean().reset_index()
или
out=df.groupby(pd.Grouper(key='created_at',freq='1D'))['score'].mean().reset_index()
или
out=df.groupby(df.pop('created_at').dt.floor('D'))['score'].mean().reset_index()
выход из out
:
created_at score
0 2021-04-03 0.170000
1 2021-04-04 0.016667
При необходимости используйте:
out=out.rename(columns={'created_at':'date','score':'average_score'})
Ответ №2:
Предполагая , что created_at
это тип datetime
, вы можете использовать pd.Grouper
и получить свой результат в одной строке:
df.groupby(pd.Grouper(key='created_at', freq='D')).mean().reset_index().rename(columns={'created_at': 'date', 'score': 'average_score'})
date average_score
0 2021-04-03 0.170000
1 2021-04-04 0.016667