在pandas中的数据框中的选定列中获取第二大值

时间:2018-04-29 23:38:28

标签: pandas

我有一个数据框,其子集如下所示。我向您展示的那些列的右侧和左侧有更多列

M_cols  10D_MA  30D_MA  50D_MA  100D_MA 200D_MA       Max   Min   2nd smallest
        68.58    70.89   69.37   **68.24**   64.41   70.89   64.41   68.24 
        **68.32**71.00   69.47   68.50   64.49       71.00   64.49   68.32 
        68.57 **68.40**  69.57   71.07   64.57       71.07   64.57   68.40 

我可以使用以下代码获得min(并且max也很容易)

df2['MIN'] = df2[['10D_MA','30D_MA','50D_MA','100D_MA','200D_MA']].max(axis=1)

但我如何获得第二小。我试过这个并得到以下错误

df2['2nd SMALLEST'] = df2[['10D_MA','30D_MA','50D_MA','100D_MA','200D_MA']].nsmallest(2)

TypeError:nsmallest()缺少1个必需的位置参数:' columns'

似乎这应该是一个简单的答案,但我被困了

1 个答案:

答案 0 :(得分:4)

例如,你有以下df

df=pd.DataFrame({'V1':[1,2,3],'V2':[3,2,1],'V3':[3,4,9]})

在拿起需要比较的值之后,我们只需要按轴排序值= 0(默认值)

sortdf=pd.DataFrame(np.sort(df[['V1','V2','V3']].values))
sortdf
Out[419]: 
   0  1  2
0  1  3  3
1  2  2  4
2  1  3  9

第一名:

sortdf.iloc[:,-1]
Out[421]: 
0    3
1    4
2    9
Name: 2, dtype: int64

第二次最大

sortdf.iloc[:,-2]
Out[422]: 
0    3
1    2
2    3
Name: 1, dtype: int64