查找熊猫列子集中的最大值和第二个最大值之间的差异

Ric*_*tra 6 python numpy pandas

我有一个相当大的数据框:

一种 C D
0 17 36 45 54
1 18 23 17 17
2 74 47 8 46
3 48 38 96 83

我正在尝试创建一个新列,它是(列的最大值)-(第二个最高值)/(第二个最高值)。

在这个例子中,它看起来像:

一种 C D 差异
0 17 36 45 54 .20
1 18 23 17 17 .28
2 74 47 8 46 .57
3 48 38 96 83 .16

我试过 df['diff'] = df.loc[:, 'A': 'D'].max(axis=1) - df.iloc[:df.index.get_loc(df.loc[:, 'A': 'D'].idxmax(axis=1))] / ...

但即使是公式的那部分也会返回错误,更不用说最后的除法了。我相信一定有更简单的方法来解决这个问题。

编辑:此外,我还试图获得最大值与紧跟最大值之前的列之间的差异。我知道这是一个有点不同的问题,但我会很感激任何见解。谢谢!

Qua*_*ang 3

一种方法是应用 udf:

def get_pct(x):
    xmax2, xmax = x.sort_values().tail(2)
    return (xmax-xmax2)/xmax2

df['Diff'] = df.apply(get_pct, axis=1)
Run Code Online (Sandbox Code Playgroud)

输出:

    A   B   C   D      Diff
0  17  36  45  54  0.200000
1  18  23  17  17  0.277778
2  74  47   8  46  0.574468
3  48  38  96  83  0.156627
Run Code Online (Sandbox Code Playgroud)