熊猫第二大值的列名

时间:2014-09-24 11:13:20

标签: pandas dataframe

我正在尝试查找与DataFrame中最大和第二大值相关联的列名称,这是一个简化示例(真正的列有超过500列):

Date  val1  val2 val3 val4
1990   5     7    1    10
1991   2     1    10   3
1992   10    9    6    1
1993   50    10   2    15
1994   1     15   7    8

需要成为:

Date  1larg   2larg
1990  val4    val2
1991  val3    val4
1992  val1    val2
1993  val1    val4
1994  val2    val4

我可以找到idxmax具有最大值(i,e,1larg)的列名,但我怎样才能找到第二大?

1 个答案:

答案 0 :(得分:6)

(您的行中没有任何重复的最大值,因此如果您有[1,1,2,2],我想您可以选择val3val4。)< / p>

一种方法是使用argsort的结果作为带有列名的系列的索引。

df = df.set_index("Date")
arank = df.apply(np.argsort, axis=1)
ranked_cols = df.columns.to_series()[arank.values[:,::-1][:,:2]]
new_frame = pd.DataFrame(ranked_cols, index=df.index)

产生

         0     1
Date            
1990  val4  val2
1991  val3  val4
1992  val1  val2
1993  val1  val4
1994  val2  val4
1995  val4  val3

(我已经添加了额外的1995 [1,1,2,2]行。)

或者,您可以melt成平面格式,在每个日期组中选出最大的两个值,然后再将其重新设置。