按类别选择数据框列的最小值

时间:2017-12-17 01:40:18

标签: python pandas dataframe pandas-groupby

我有一个数据框,代表一系列电视节目的IMDb评级,其中包含以下列:

日期,ep_no,剧集,show_title,季节,评级

我需要选择每个节目中收视率最低的一集,但是我无法显示我想要的所有列。

我可以使用以下方法成功选择正确的数据:

df.groupby('show_title')['rating'].min()

但这仅显示节目标题和该节目最低评级剧集的评分。

我需要它来显示: show_title,ep_no,剧集,评级

我已尝试对代码进行各种调整,从简单到复杂,但我想我现在还没有足够的经验来破解这个特殊的谜题。

有什么想法吗?

3 个答案:

答案 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()