You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中创建包含每行第二大值的col4列

实现DataFrame每行第二大值的正确方法

你的代码错误在于df.nlargest(2, columns=cols)是对整个DataFrame按指定列筛选前2行最大值,并非逐行计算每行的第二大值。以下是三种可行的正确实现方式:

方法1:使用apply逐行处理(直观易懂)

import pandas as pd
import numpy as np

df = pd.DataFrame([[4, 1, 5], 
                   [5, 2, 9],
                   [2, 9, 3], 
                   [8, 5, 4]], 
                  columns=["col_A", "col_B", "col_C"])

df['col4'] = df.apply(lambda row: row.nlargest(2).iloc[1], axis=1)
  • 逻辑:row.nlargest(2)获取该行前2个最大值(降序排列),iloc[1]取第二个元素即第二大值,axis=1指定按行处理。

方法2:使用numpy.partition(性能最优,适合大数据集)

df['col4'] = np.partition(df.values, -2, axis=1)[:, -2]
  • 逻辑:np.partition会将每行数据中倒数第2大及更大的值移至末尾区域,直接取[:, -2]即可得到每行的第二大值,此方法避免了逐行循环,性能远高于apply。

方法3:排序后取第二大值

df['col4'] = df.apply(lambda row: sorted(row, reverse=True)[1], axis=1)
  • 逻辑:将每行元素降序排序后,取索引为1的元素(即第二大值),实现简单但性能略逊于numpy方法。

执行任意一种方法后,最终DataFrame结果如下:

col_A  col_B  col_C  col4
0      4      1      5     4
1      5      2      9     5
2      2      9      3     3
3      8      5      4     5

内容的提问来源于stack exchange,提问作者seblful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:12:48