Я уверен, что это было задано и ответили раньше, но я, вероятно, неправильно формулирую свой вопрос.
У меня есть следующий 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
.
Вам нужно преобразовать столбец в 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
as_index
или reset_index
?
as_index=False
используется для возврата DataFrame
- конвертировать значения индекса в столбцы. Но забавно, что это не всегда работает, всегда работает .reset_imdex()
что делает то же самое.
Удалите лишний столбец, 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