微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Rank 列添加到 MultiIndex Dataframe

如何解决将 Rank 列添加到 MultiIndex Dataframe

我喜欢向 MultiIndex DataFrame 添加 RANK 列。

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 值,排名将根据日期升序排列。

解决方法

您可以使用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 已排序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。