如何选取Pandas DataFrame最后一行数值最高的前n个列
最优实现方案
直接用pandas内置的nlargest方法即可,一行代码完成需求,性能和可读性都最优:
# 筛选最后一行数值最高的2个列 filtered_df = df[df.iloc[-1].nlargest(2).index]
代码说明
df.iloc[-1]取DataFrame的最后一行.nlargest(2)取该行中数值最大的前2个元素,相比手动排序后切片的写法,不需要对所有列做全排序,时间复杂度更低,列数越多性能优势越明显。默认遇到并列值时保留先出现的列,可通过keep参数调整:- 传入
keep='last'并列时保留后出现的列 - 传入
keep='all'保留所有满足前2大的列(如果有3个并列第2,会返回3列)
- 传入
.index取出前2大元素对应的列名,直接用列名索引筛选原DataFrame即可
可选优化:保留原列顺序
上面的写法返回的列会按最后一行数值从大到小排序(示例中会返回c列在前、a列在后),如果需要保持和原DataFrame一致的列顺序,可以调整为:
top_cols = df.iloc[-1].nlargest(2).index filtered_df = df[sorted(top_cols, key=df.columns.get_loc)]
运行结果
最终输出的filtered_df内容如下:
| a | c |
|---|---|
| 1 | 3 |
| 4 | 6 |
| 7 | 9 |
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

