在Pandas(Python)中按数据分组的总和

问题描述 投票:0回答:2

对于我的任务,我需要了解一些Python Pandas代码,以便使用另一种编程语言(Java)进行一些修改和重新实现。我参加了一些在线教程,但仍然存在熊猫问题。例如,这行:

uniq_page_df = df.groupby(["asin", "views_count"])
uniq_page_df = uniq_page_df.sum().reset_index()
sum_views_count = int(uniq_page_df["views_count"].sum())

在这部分中,据我所知,作者试图计算总观看次数。所以我的问题是,为什么我们需要分组并计算每组的总和(第2行),然后计算总和(第3行)?为什么我们不能在没有分组的情况下计算出来?或者我没有正确理解这部分代码。

另一个问题是,为什么在计算第2行的reset_index()之后我们需要sum()

更新:数据框中的所有列都是:asin,product_group,category_description,views_count

python pandas dataframe
2个回答
0
投票

我将编制一些数据,因为它更容易描述正在发生的事情。

这就是我认为您的代码正在尝试做的事情以及更简单的替代方案:

import pandas as pd

df = pd.DataFrame([[1, 10, 5], [2, 20, 10], [1, 10, 15],
                   [3, 30, 20], [2, 20, 25], [1, 10, 30]],
                  columns=['asin', 'views_count', 'col'])

s = int(df.groupby(['asin', 'views_count']).sum().reset_index()['views_count'].sum())
# 60

t = df.drop_duplicates(['asin', 'views_count'])['views_count'].sum()
# 60

第一次尝试是通过asin隔离独特的view_countgroupby组合的数据。要再次查询所需的列,将调用reset_index。然后将小计最后一次求和。但是你可以通过删除重复行来做同样的事情。


0
投票

对于你的第一个问题,看起来作者正在计算两个不同的东西 - 你说这是多余的是正确的。简单地运行df['views_count'].sum()将返回与最后一行相同的值。

对于第二个问题,当你预先形成一个groupby().sum()时,pandas会返回一个数据框,其索引是该组中使用的键 - 在这种情况下,索引值将是asinviews_countreset_index()将重新创建一个从0开始的默认索引,以便可以像普通列一样访问和处理views_countasin。更好的方法可能是:

#To get total views:
sum_views_count = df['views_count'].sum()

#To get views by page:
unique_page_views = df.groupby(['asin', 'views_count']).sum()

#To get the original dataframe structure back
unique_page_views = unique_page_views.reset_index()

有关详细信息,请参阅https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.htmlhttps://pandas.pydata.org/pandas-docs/stable/indexing.html

© www.soinside.com 2019 - 2024. All rights reserved.