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))] / ...
但即使是公式的那部分也会返回错误,更不用说最后的除法了。我相信一定有更简单的方法来解决这个问题。
编辑:此外,我还试图获得最大值与紧跟最大值之前的列之间的差异。我知道这是一个有点不同的问题,但我会很感激任何见解。谢谢!
一种方法是应用 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)