在Pandas DataFrame中按年份顺序重新分配连续排名
合并Pandas DataFrame并重新分配排名
原始数据
我有三个对应不同年份的Pandas DataFrame:
2022年数据
ID YEAR RANK 500 2022 1 510 2022 2 520 2022 3
2021年数据
ID YEAR RANK 501 2021 1 550 2021 2 560 2021 3
2020年数据
ID YEAR RANK 505 2020 1 506 2020 2 507 2020 3
需求
将三个DataFrame按2022年→2021年→2020年的顺序合并,并按以下规则重新分配排名:
- 2022年的排名保持原有值不变
- 2021年的起始排名为2022年最高排名+1,后续排名依次递增
- 2020年的起始排名为合并后2021年的最高排名+1,后续排名依次递增
最终需要得到如下格式的结果:
ID YEAR RANK 500 2022 1 510 2022 2 520 2022 3 501 2021 4 550 2021 5 560 2021 6 505 2020 7 506 2020 8 507 2020 9
解决方案
假设三个原始DataFrame分别命名为df_2022、df_2021、df_2020,可以通过以下步骤实现需求:
import pandas as pd # 计算排名偏移量 offset_2021 = df_2022['RANK'].max() offset_2020 = offset_2021 + df_2021['RANK'].max() # 调整各年份的排名 df_2021['RANK'] += offset_2021 df_2020['RANK'] += offset_2020 # 按指定顺序合并DataFrame final_df = pd.concat([df_2022, df_2021, df_2020], ignore_index=True) # 输出结果 print(final_df)
执行上述代码后,即可得到符合要求的合并结果。
内容的提问来源于stack exchange,提问作者Python_help
相关产品推荐
相关产品推荐

