Python 了解群比和熊猫
我试图使用电影数据集中的熊猫来找到评论最多的10位评论家,并在一个表格中列出他们的名字,以及他们工作的杂志出版物的名称以及他们第一次和最后一次评论的日期 电影数据集以csv文件开始,该文件在excel中显示如下:Python 了解群比和熊猫,python,pandas,ipython,Python,Pandas,Ipython,我试图使用电影数据集中的熊猫来找到评论最多的10位评论家,并在一个表格中列出他们的名字,以及他们工作的杂志出版物的名称以及他们第一次和最后一次评论的日期 电影数据集以csv文件开始,该文件在excel中显示如下: critic fresh date publication title reviewtext r.ebert fresh 1/2/12 Movie Mag Toy Story 'blahblah' n.bob rott
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
(你可以假设评论家只在一家杂志/出版物上发表评论)
然后我的基本代码是这样开始的:
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()只是将数据帧拆分为组。然后,对每个组应用一些函数,pandas将尽可能地将结果缝合在一起——由原始组标识符索引。除此之外,据我所知,对于原始组的样子没有“记忆”
相反,您必须指定要输出的内容。有几种方法可以做到这一点——我会研究“agg”和“apply”Agg'用于为整个组返回单个值的函数,而apply则灵活得多
如果你具体说明你想做什么,我会更有帮助。现在,我只举两个例子
grouped_reviews=reviews.groupby('critic'))
agg('size',{'date':['first','last'],'title':['first','last']})
def get_first_和_last(df):
返回pd.concat((df.iloc[0],df.iloc[-1]),轴=1,忽略索引=True)
分组审查。申请(先获取后获取)
如果你对你想做的事情更具体一些,我可以给你一个更具体的答案。你想做什么还不完全清楚。但是size()函数(不是groupby)删除了大部分列。列(如日期)不是特定于审阅者的,因此不清楚将它们附加到审阅计数中意味着什么。但是您可以使用reviews.groupby('critic').date.max()和类似的函数来汇总其他列的数据。您可以使用
reviews[reviews.critic.isin(most_rated.index)]
来获取最受好评的评论的完整数据框;这个问题/答案可能会有帮助:我对你删除的问题有一个答案,如果你想取消删除:非常感谢!这很有帮助,特别是grouped.agg()和grouped.size()对数据集的作用。你举的第一个例子我还有最后一个问题。agg()只接受一个参数,所以在其中使用“size”不起作用(至少对我来说不起作用)。你会如何处理grouped.agg({'date':['min','max'],'publication':['first']}并打印一个表,其中包含相同的信息,但只有评论最多的10位评论家?