如何对DataFrame最后一行元素按对应列整体采用min排名法生成排名列表
解决DataFrame最后一行元素按列'min'排名的问题
嘿,这个需求其实用pandas自带的rank()方法就能完美搞定,我来给你拆解一下具体步骤:
核心思路
我们需要对DataFrame的每一列单独做排名(采用min规则),然后提取最后一行对应的排名值,转成列表即可。这里要注意排名的顺序——从你的示例来看,是降序排名(数值越大排名越靠前),这样才能得到你要的[3,3,2,1]结果。
完整代码实现
import pandas as pd # 创建示例DataFrame df = [[10, 2, 8, 4], [12, 6, 4, 1], [8, 4, 3, 2], [9, 3, 4, 6]] df = pd.DataFrame(df) # 1. 对每一列执行min规则的降序排名 # 2. 提取最后一行的排名结果 # 3. 转成整数列表 rank_result = df.rank(method='min', ascending=False).iloc[-1].astype(int).tolist() print(rank_result) # 输出: [3, 3, 2, 1]
代码解释
df.rank(method='min', ascending=False):method='min':当列中有相同数值时,给它们分配相同的最小排名(比如示例第2列的两个4,都会被排在第2位)。ascending=False:按降序排名,数值越大排名越靠前(对应示例中第0列的9,在[10,12,8,9]里排第3位)。
.iloc[-1]:获取排名结果的最后一行,也就是原DataFrame最后一行元素对应的排名。.astype(int).tolist():把浮点型的排名结果转成整数,再转换成列表格式。
验证示例
运行上面的代码后,输出正好是你预期的[3, 3, 2, 1],完全符合需求。
内容的提问来源于stack exchange,提问作者Scott Woodhall
相关产品推荐
相关产品推荐

