对于我的任务,我需要理解一些Python代码,以便进行一些修改,并使用另一种编程语言(Java)重新实现它。我参加了一些在线教程,但仍然对Pandas有问题。例如,这一行:
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
发布于 2018-03-01 16:01:31
我要编一些数据,因为它更容易描述正在发生的事情。
这就是我认为您的代码正在尝试做的事情,也是一个简单得多的选择:
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_count组合通过groupby来隔离数据。要再次查询所需的列,将调用reset_index。然后对小计进行最后一次求和。但是,您也可以通过删除重复行来做到这一点。
发布于 2018-03-01 16:05:26
对于第一个问题,作者似乎在这里计算两种不同的东西--你说这是多余的是正确的。简单地运行df['views_count'].sum()将返回与最后一行相同的值。
对于第二个问题,在预置一个groupby().sum()时,熊猫返回一个数据数据,其中索引是组中使用的键--在本例中,索引值为asin和views_count。reset_index()将重新创建从0开始的默认索引,以便可以访问views_count和asin,并将其视为普通列。更好的办法可能是:
#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.html和https://pandas.pydata.org/pandas-docs/stable/indexing.html。
https://stackoverflow.com/questions/49053494
复制相似问题