使用 groupby.size() 后获取组名

Get Groupname after using groupby.size()

我正在使用如下所示的 Billboard-Charts 数据集:

我想编写一个函数来接收任意数量的艺术家作为参数。从这些艺术家中,我想确定谁的歌曲在排行榜上停留时间最长。我已经设法编写了我想要的功能,但有一件事我想不通:

我怎样才能得到在排行榜上最长的歌曲的名字?我只是不知道如何在使用 .size() 函数后访问组名。

def determine_most_popular_performer(*performers):
    results = []
    for performer in performers:
        results.append((performer, max(df.loc[df["performer"]==performer].groupby("song").size())))
        return max(results)
    
print(determine_most_popular_performer("Queen", "Prince", "Michael Jackson"))
>> ('Queen', 44)

作为我想要的输出 ('Queen', 'Bohemian Rapsody', 44)

您可以使用 .idxmax() 访问最大行。

然后您应该能够 select 该行并通过以下更改访问该行中的值。请注意,我使用 .reset_index() 将 groupby 索引设置为列。

def determine_most_popular_performer(*performers):
    results = []
    for performer in performers:
        df2 = df.loc[df["performer"]==performer].groupby("song").size().reset_index(name="value")
        max_id = df2["value"].idxmax()
        results.append((performer, df2.loc[max_id]["song"], df2.loc[max_id]["value"]))
        return max(results)