【问题标题】:Add a Rank column to MultiIndex Dataframe将 Rank 列添加到 MultiIndex Dataframe
【发布时间】:2021-06-16 11:24:25
【问题描述】:

我喜欢将 RANK 列添加到 MultiIndex DataFrame。

DataFrame 具有三个级别(latitudelongitudetime)和两列(FFDIREF_ID)。它看起来像:

                                    FFDI        REF_ID
latitude    longitude   time        
-39.20000   140.80000   1991-04-21  4.10000     0
                        1972-04-21  4.00000     0
                        1972-04-09  3.70000     0
                        1972-05-14  3.60000     0
                        1972-03-11  3.50000     0
            140.83786   1972-04-21  4.20000     1
                        1991-04-21  4.10000     1
                        1972-04-09  3.70000     1
                        1972-05-14  3.70000     1
                        1972-03-11  3.50000     1
            140.87572   1972-04-21  4.20000     2
                        1991-04-21  4.10000     2
                        1972-05-14  3.70000     2
                        1972-04-09  3.60000     2
                        1972-03-11  3.50000     2
...     ...     ...     ...     ...
-33.90000   149.92429   1972-12-23  30.80000    36109
                        1972-12-22  25.90000    36109
                        1991-03-19  22.60000    36109
                        1972-12-24  21.40000    36109
                        1972-09-22  20.00000    36109
            149.96214   1972-12-23  31.60000    36110
                        1972-12-22  26.40000    36110
                        1991-03-19  22.20000    36110
                        1972-12-24  22.10000    36110
                        1972-09-22  20.50000    36110
            150.00000   1972-12-23  33.60000    36111
                        1972-12-22  27.90000    36111
                        1972-12-24  23.60000    36111
                        1991-03-19  23.10000    36111
                        1972-09-22  21.20000    36111

180560 rows × 2 columns

我想添加一个名为 RANK 的新列,这将显示每个纬度和经度对的 FFDI 排名(例如,最大的 FFDI 在顶部)。所以结果将如下所示:

                                    FFDI        REF_ID      RANK
latitude    longitude   time        
-39.20000   140.80000   1991-04-21  4.10000     0           1
                        1972-04-21  4.00000     0           2
                        1972-04-09  3.70000     0           3
                        1972-05-14  3.60000     0           4
                        1972-03-11  3.50000     0           5
            140.83786   1972-04-21  4.20000     1           1
                        1991-04-21  4.10000     1           2
                        1972-04-09  3.70000     1           3
                        1972-05-14  3.70000     1           4
                        1972-03-11  3.50000     1           5
            140.87572   1972-04-21  4.20000     2           1
                        1991-04-21  4.10000     2           2
                        1972-05-14  3.70000     2           3
                        1972-04-09  3.60000     2           4
                        1972-03-11  3.50000     2           5
...     ...     ...     ...     ...     ...     ...
-33.90000   149.92429   1972-12-23  30.80000    36109       1
                        1972-12-22  25.90000    36109       2
                        1991-03-19  22.60000    36109       3
                        1972-12-24  21.40000    36109       4
                        1972-09-22  20.00000    36109       5
            149.96214   1972-12-23  31.60000    36110       1
                        1972-12-22  26.40000    36110       2
                        1991-03-19  22.20000    36110       3
                        1972-12-24  22.10000    36110       4
                        1972-09-22  20.50000    36110       5
            150.00000   1972-12-23  33.60000    36111       1
                        1972-12-22  27.90000    36111       2
                        1972-12-24  23.60000    36111       3
                        1991-03-19  23.10000    36111       4
                        1972-09-22  21.20000    36111       5

180560 rows × 2 columns

编辑:如果多天有相同的重复 FFDI 值,排名将根据日期升序排列。

【问题讨论】:

    标签: python pandas numpy python-xarray


    【解决方案1】:

    你可以使用groupby():

    df['RANK'] = df.groupby(['latitude','longitude'])['FFDI'].rank(ascending=False)
    

    更新每条评论,你可以试试:

    df['RANK'] = (df.sort_values(['FFDI','Time'], ascending=[False,True])
                    .groupby(['latitude','longitude']).cumcount() + 1
                 )
    

    您也可以尝试将method='first' 传递给原始答案的rank,因为Time 已排序。

    【讨论】:

    • 对不起。我意识到有一个问题,如果多天有多个相同的 FFDI 值,排名应该基于升序的日期。有什么想法吗?
    • @alextc 查看更新后的答案。您可以使用参数。
    • 谢谢。我试过“df['RANK'] = df.groupby(['latitude','longitude'])['FFDI'].rank(ascending=False, method='first').astype(np.int32)”
    猜你喜欢
    • 2019-03-22
    • 2013-06-21
    • 1970-01-01
    • 2013-10-06
    • 2016-12-30
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多