了解groupby和熊猫

用户名

我正在尝试在电影数据集上使用熊猫来查找评论最多的10位评论家,并在表格中列出他们的名字,并附上他们工作的杂志出版物的名称以及第一次和最后一次评论的日期。

电影数据集以csv文件开头,在excel中看起来像这样:

critic   fresh    date    publication  title      reviewtext     
r.ebert   fresh   1/2/12   Movie Mag   Toy Story    'blahblah'
n.bob     rotten  4/2/13   Time        Ghostbusters 'blahblah'
r.ebert   rotten  3/31/09  Movie Mag   CasaBlanca   'blahblah' 

(您可以假设评论家仅在一个杂志/出版物上发表评论)

然后我的基本代码如下所示:

reviews = pd.read_csv('reviews.csv')
reviews = reviews[~reviews.quote.isnull()]
reviews = reviews[reviews.fresh != 'none']
reviews = reviews[reviews.quote.str.len() > 0]

most_rated = reviews.groupby('critic').size().order(ascending=False)[:30]
print most_rated
output>>>
critic
r.ebert  2
n.bob    1

然后,我知道如何区分前十名评论家及其评论数量(如上所示),但是我仍然不熟悉pandas groupby,并且使用它似乎可以摆脱其余的专栏文章(和以及发布和日期之类的内容)。当该代码运行时,它仅打印电影评论员的列表及其完成的评论数量,而不打印其他任何列数据。

老实说,我迷失了如何去做。我是否需要将原始评论中的数据添加回排序后的数据框中?我是否需要使一个函数应用到groupby函数?提示或建议将非常有帮助!

专家

正如DanB所说,groupby()只是将您的DataFrame分成几组。然后,对每个组应用一些功能,大熊猫将尽最大可能将结果拼接在一起-由原始组标识符索引。除此之外,据我了解,原始组的外观没有“记忆”。

相反,您必须指定要输出的内容。有几种方法可以做到这一点-我会研究“ agg”和“ apply”。“ Agg”用于为整个组返回单个值的函数,而apply则灵活得多。

如果您指定要做什么,我会为您提供更多帮助。现在,我仅举两个例子。

  1. 假设您要为每个审阅者提供评论的数量,第一次和最后评论的日期以及首先和最后评论的电影。由于每一个都是每个组一个值,因此请使用“ agg”:

grouped_reviews = reviews.groupby('critic') grouped.agg('size', {'date': ['first', 'last'], 'title': ['first', 'last']})

  1. 假设您想返回每个审阅者的第一个和最后一个审阅的数据框。我们可以使用“ apply”,它可以与任何输出pandas对象的函数一起使用。因此,我们将编写一个函数,该函数采用每个组以及仅第一行和最后一行的数据框:

def get_first_and_last(df): return pd.concat((df.iloc[0], df.iloc[-1]), axis = 1,ignore_index = True) grouped_reviews.apply(get_first_and_last)

如果您对要做什么有更具体的了解,我可以为您提供更具体的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章