Панды, групповые и подсчет данных в других колонках - PullRequest
1 голос
/ 19 марта 2019

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

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

Я хочу использовать с пандами lib.

Спасибо!

Перед изменением - пример примера:

     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 Ответ

3 голосов
/ 19 марта 2019

Вы можете преобразовать столбец в годы по 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
...