对于我的任务,我需要了解一些Python Pandas Code,以便使用另一种编程语言(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
答案 0 :(得分: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_count
groupby
组合。要再次查询所需的列,将调用reset_index
。然后将小计最后一次求和。但是你可以通过删除重复的行来做同样的事情。
答案 1 :(得分:0)
对于你的第一个问题,看起来作者在这里计算两个不同的东西 - 你说这是多余的是正确的。只需运行df['views_count'].sum()
将返回与最后一行相同的值。
对于第二个问题,当您预先形成groupby().sum()
时,pandas会返回一个数据框,其索引是该组中使用的键 - 在这种情况下,索引值将为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了解详情。