【问题标题】:Find maximum and group to dataset?找到最大值并分组到数据集?
【发布时间】:2020-07-25 12:51:30
【问题描述】:

pandas dataframe

这是我在上面使用的 pandas 数据框。形状为 (1049,3)
我是初学者,在尝试实现回答的目标时遇到了一些困难 "年复一年流行哪种类型"

1) release_year = 1960 到 2015 年,包括多个相同年份(整数)
2) 流派 = 20 种类型(对象)
3) 没有缺失值

我已经尝试过了,但我收到一条错误消息,提示我无法使用 irow

    genre.groupby('release_year').apply(lambda genre:genre.irow(genre.value.argmax()))

最终我想要看起来像这样的东西......(x,y)

                  popular_genre      
    release_year    
      1960          Drama
      1961          Comedy
      1962          Action
       .
       .
      2015         Science Fiction

所以我可以使用直方图或线条来绘制它。如果用这么多 x 值绘制图表太难看,我可能不得不将年份划分为几十年。

我最初的计划是首先找到每年数量最多的流派,然后将其放入 Dataframe 或制作一个新流派

还是我想太多了,有没有办法通过绘图来绕过这个?

提前谢谢大家:)

【问题讨论】:

    标签: pandas numpy lambda group-by max


    【解决方案1】:

    您可以使用两次 groupby 并获得最大计数的流派。

    (
        df.groupby(by=['release_year'])
        .apply(lambda x: x.groupby('popular_genre')['count']
                          .sum().nlargest(1))
    )
    

    如果每年的popular_genre 是唯一的,您也可以这样做:

    (
        df.groupby(by='release_year', as_index=False)
        .apply(lambda x: x.sort_values('count').tail(1))
        .reset_index(drop=True)
    )
    

    【讨论】:

    • 啊,非常感谢!没有“popular_gene”列(我需要以某种方式绘制从 1960 年到 2015 年每年最流行的流派)。我正在考虑使用直方图。我想知道我是否正确理解了代码。因此,df 按“release_year”列分组,而不将其设置为索引。所以从那里我们有一个对象,所以我们需要添加一个函数,所以我们使用 .apply 和附带的函数 lambda。因此,lambda 所做的函数是 sort_values(并且仅在“release_year”内)。 那么tail(1) 在做什么呢?是因为它至少需要一个计数吗?谢谢!
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2013-03-02
    • 2018-09-04
    相关资源
    最近更新 更多