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
)