Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将秩列添加到多索引数据帧_Python_Pandas_Numpy_Python Xarray - Fatal编程技术网

Python 将秩列添加到多索引数据帧

Python 将秩列添加到多索引数据帧,python,pandas,numpy,python-xarray,Python,Pandas,Numpy,Python Xarray,我喜欢向多索引数据帧添加RANK列 数据帧有三个级别(纬度、经度和时间)和两列(FFDI和REF\u ID)。它看起来像: FFDI REF_ID latitude longitude time -39.20000 140.80000 1991-04-21 4.10000 0 1972-04-21 4.00000

我喜欢向多索引数据帧添加
RANK

数据帧有三个级别(
纬度
经度
时间
)和两列(
FFDI
REF\u 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.sort_values(['FFDI','Time'], ascending=[False,True])
                .groupby(['latitude','longitude']).cumcount() + 1
             )

您还可以尝试将原始答案上的
method='first'
传递到
rank
,前提是
时间已排序。

对不起。我意识到有一个问题,那就是,如果在多天内有多个相同的FFDI值,那么排名应该基于升序上的日期。有什么想法吗?@alextc查看更新的答案。您可以使用参数。谢谢。我尝试了“df['RANK']=df.groupby(['latitude','longitude'])['FFDI'].RANK(ascending=False,method='first').astype(np.int32)”
df['RANK'] = (df.sort_values(['FFDI','Time'], ascending=[False,True])
                .groupby(['latitude','longitude']).cumcount() + 1
             )