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

1

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

У меня есть следующий DataFrame:

  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.

  • 0
    @jezrael не работает, но спасибо за попытку.
  • 0
    @jezrael - извините, исправлено.
Показать ещё 4 комментария
Теги:
pandas

2 ответа

1
Лучший ответ

Вам нужно преобразовать столбец в float или astype сначала с помощью astype а затем суммировать sum по GroupBy.sum:

Решение, использующее Series - in 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

Другое решение с правопреемника назад конвертированы valuse из колонки 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
  • 0
    Благодарю. Принято. Зачем мне в этих случаях as_index или reset_index ?
  • 0
    @zerohedge - as_index=False используется для возврата DataFrame - конвертировать значения индекса в столбцы. Но забавно, что это не всегда работает, всегда работает .reset_imdex() что делает то же самое.
Показать ещё 2 комментария
2

Удалите лишний столбец, 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню