Pandas, groupby и подсчет данных в других столбцах

#python #pandas #numpy #data-science #data-analysis

#python #pandas #numpy #наука о данных #анализ данных

Вопрос:

У меня есть данные с четырьмя столбцами, которые включают в себя: Id , CreationDate , Score и ViewCount .

CreationDate Имеет следующий формат, например: 2011-11-30 19:41:14.960. Мне нужно сгруппировать по годам CreationDate , посчитать их, суммируя Score и ViewCount также, и добавить в дополнительные столбцы.

Я хочу использовать с библиотекой pandas.

Спасибо!

Перед изменением — примерный пример:

      Id   CreationDate              Score   ViewCount
0    1    2011-11-30 19:15:54.070   25      1526
1    2    2011-11-30 19:41:14.960   20      601
2    3    2012-11-30 19:42:45.470   36      1015
3    4    2018-11-30 19:44:55.593   8       1941
4    5    2011-11-30 19:53:23.387   11      5053
5    6    2018-11-30 20:04:43.757   25      5123
6    7    2011-11-30 20:08:23.267   53      8945
  

После изменения — представить данные следующим образом:

      Id   CreationDate              Score   ViewCount
0    1    2011                      109     16125
2    3    2012                      36      1015
3    4    2018                      33      7064                            
  

Ответ №1:

Вы можете преобразовать столбец в years by Series.dt.year и агрегировать по GroupBy.agg с помощью словаря для столбцов с функцией агрегирования, в последнюю очередь добавить, DataFrame.reindex при необходимости, тот же порядок столбцов, что и в оригинале DataFrame :

 #if necessary convert to datetimes
df['CreationDate'] = pd.to_datetime(df['CreationDate'])

df1 = (df.groupby(df['CreationDate'].dt.year)
         .agg({'Id':'first', 'Score':'sum', 'ViewCount':'sum'})
         .reset_index()
         .reindex(columns=df.columns)
       )

print (df1)
   Id  CreationDate  Score  ViewCount
0   1          2011    109      16125
1   3          2012     36       1015
2   4          2018     33       7064