我有一个数据框,代表一系列电视节目的IMDb评级,其中包含以下列:
日期,ep_no,剧集,show_title,季节,评级
我需要选择每个节目中收视率最低的一集,但是我无法显示我想要的所有列。
我可以使用以下方法成功选择正确的数据:
df.groupby('show_title')['rating'].min()
但这仅显示节目标题和该节目最低评级剧集的评分。
我需要它来显示: show_title,ep_no,剧集,评级
我已尝试对代码进行各种调整,从简单到复杂,但我想我现在还没有足够的经验来破解这个特殊的谜题。
有什么想法吗?
答案 0 :(得分:1)
如果我理解你想要什么,this question就像这个问题一样;以下代码应该可以解决问题。
df[df.groupby('show_title')['rating'].transform(min) == df['rating']]
答案 1 :(得分:0)
一种方法是按照评级对DataFrame进行排序,然后删除show
的重复项,同时保持每个节目的第一次出现:
df.sort_values(by='rating').drop_duplicates(['show_title'], keep='first')
答案 2 :(得分:0)
# It's easy just do a sort by show_title , rating before using groupby
df.sort_values(by=['show_title','rating'],inplace=True)
# Now use groupby and return the first instance of every group by object
# first row will automatically contain the minimum rating
df1 = df.groupby('show_title').first()