将 Rank 列添加到 MultiIndex Dataframe
Add a Rank column to MultiIndex Dataframe
我想向 MultiIndex DataFrame 添加一个 RANK
列。
DataFrame有三层(latitude
、longitude
和time
)和两列(FFDI
和REF_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
)
如果 Time
已排序,您也可以尝试将 method='first'
传递给原始答案的 rank
。
我想向 MultiIndex DataFrame 添加一个 RANK
列。
DataFrame有三层(latitude
、longitude
和time
)和两列(FFDI
和REF_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
)
如果 Time
已排序,您也可以尝试将 method='first'
传递给原始答案的 rank
。