了解groupby和pandas

时间:2014-03-08 01:18:19

标签: python pandas ipython

我正在尝试在电影数据集中使用pandas来查找评论最多的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函数?提示或建议将非常有帮助!

1 个答案:

答案 0 :(得分:0)

正如DanB所说,groupby()只是将你的DataFrame拆分成组。然后,您将一些函数应用于每个组,并且pandas将尽可能地将结果拼接在一起 - 由原始组标识符索引。除此之外,据我所知,原始群体看起来没有“记忆”。

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

如果您指定要执行的操作,我会更有帮助。现在,我只想举两个例子。

  1. 假设您要为每位评论者提供评论数量,以及第一次和最后一次评论的日期以及首次和最后评论的电影。由于每个组都是每个组的单个值,因此请使用'agg':
  2. grouped_reviews = reviews.groupby('critic') grouped.agg('size', {'date': ['first', 'last'], 'title': ['first', 'last']})

    1. 假设您要返回每个审阅者的第一次和最后一次审核的数据框。我们可以使用'apply',它适用于输出pandas对象的任何函数。因此,我们将编写一个函数,该函数将每个组和一个数据帧作为第一行和最后一行:
    2. 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)

      如果您更具体地了解您的目标,我可以给您一个更具体的答案。