如何在Pandas DataFrame中对多行列范围内的数值计算全局排名
实现方案
核心思路是先把需要参与全局排名的所有列的数值展平为一维结构,计算完全局排名后再恢复为原DataFrame的行列结构,最后合并到原表中即可。
示例代码
import pandas as pd # 1. 构造示例DataFrame df = pd.DataFrame( data=[[60, 20, 10], [40, 30, 80], [70, 50, 50]], index=['Row1', 'Row2', 'Row3'], columns=['Column1', 'Column2', 'Column3'] ) # 2. 定义需要参与全局排名的列(实际使用时替换为对应列名即可) rank_target_cols = ['Column1', 'Column2', 'Column3'] # 3. 展平选中列计算全局排名,再恢复原结构 rank_result = df[rank_target_cols].stack()\ .rank(ascending=False, method='min')\ .unstack() # 4. 重命名排名字段并合并回原表 rank_result.columns = [f"{col}_rank" for col in rank_result.columns] df = pd.concat([df, rank_result], axis=1) # 输出结果 print(df)
参数说明
rank方法的两个核心参数可以根据实际需求调整:
ascending:控制排名顺序,False为降序(数值越大排名越靠前,和示例规则一致),True为升序method:控制重复值的排名规则,常用取值:min:重复值取最小排名(和示例规则一致,比如两个并列第4的50,下一个数值排名为6)average:重复值取平均排名first:按值出现的先后顺序排名,相同值不会并列max:重复值取最大排名
运行上述代码输出的结果和期望输出完全一致。
内容的提问来源于stack exchange,提问作者OldSport
相关产品推荐
相关产品推荐

