我有一个数据框,代表一系列电视节目的IMDb评级,包括以下列:
date,ep_no,episode,show_title,season,rating
我需要选择每个节目中收视率最低的一集,但是我无法显示我想要的所有列。
我可以使用以下方法成功选择正确的数据
df.groupby('show_title')['rating'].min()
但这仅显示节目标题和该节目的最低评级剧集的评级。
我需要它来显示:show_title,ep_no,episode,rating
我已尝试对代码进行各种调整,从简单到复杂,但我想我现在还没有足够的经验来破解这个特殊的难题。
有任何想法吗?
如果我明白你想要什么,this question就像这个问题;以下代码应该可以解决问题。
df[df.groupby('show_title')['rating'].transform(min) == df['rating']]
一种方法是通过评级对DataFrame进行排序,然后删除show
的重复项,同时保持每个节目的第一次出现:
df.sort_values(by='rating').drop_duplicates(['show_title'], keep='first')
# 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()