Панды: сгруппировать по 1 столбцу, суммировать другой и избавиться от повторяющихся строк - PullRequest
0 голосов
/ 15 октября 2018

Я уверен, что раньше об этом спрашивали и отвечали, но, возможно, я неправильно сформулировал свой вопрос.

У меня есть следующий фрейм данных:

  article day views
0  729910  13   162
1  729910  14   283
2  730855  13     1
3  731449  13     2

Я хочу получитьпо одной строке на значение в статье и иметь столбец views / total_views, который суммирует число views для каждого вхождения статьи в строке.

Таким образом, вывод должен быть таким (day здесь для меня не имеет значения):

  article  views
0  729910  445 (162 + 283)
1  730855  1
2  731449  2

Ближайшее, что я получил:

parsed_report_df.groupby(['article', 'day'])['views'].sum()

Что дает:

article  day
729910   13     162
         14     283
730855   13       1
731449   13       2
735682   12       1

, но мне просто нужното же самое для views каждого различного day для каждого article.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Удаление лишних столбцов, groupby, sum и reset_index должно дать вам вывод

>>> df=pd.DataFrame(data=[[729910, 13, 162],[729910, 14, 283],[730855,13,1],[731449, 13,2]], columns=['article','day', 'views'])

>>> df
   article  day  views
0   729910   13    162
1   729910   14    283
2   730855   13      1
3   731449   13      2

>>> df[['article','views']].groupby('article').sum().reset_index()

   article  views
0   729910    445
1   730855      1
2   731449      2
0 голосов
/ 15 октября 2018

Необходимо преобразовать столбец в число с плавающей точкой или целые числа сначала на astype, а затем агрегировать sum на GroupBy.sum:

Решение, работающее с Series - в groupby также используется Series - article столбец:

 df = (parsed_report_df['views'].astype(float)
                                .groupby(parsed_report_df['article']).sum()
                                .reset_index())
print (df)
  article  views
0  729910  445.0
1  730855    1.0
2  731449    2.0

Другое решение с присвоением обратно преобразованного значения столбца views:

parsed_report_df['views'] = parsed_report_df['views'].astype(float)
df = parsed_report_df.groupby('article', as_index=False)['views'].sum()
print (df)
  article  views
0  729910  445.0
1  730855    1.0
2  731449    2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...