Сгруппируйте фрейм данных по дате и создайте новый фрейм данных о среднем балле

#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