我试图找到与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
Run Code Online (Sandbox Code Playgroud)
需要成为:
Date 1larg 2larg
1990 val4 val2
1991 val3 val4
1992 val1 val2
1993 val1 val4
1994 val2 val4
Run Code Online (Sandbox Code Playgroud)
我可以找到idxmax具有最大值(i,e,1larg)的列名,但是如何找到第二大?
(您的行中没有任何重复的最大值,因此,如果[1,1,2,2]
您想要val3
并被val4
选中,我会猜测.)
一种方法是使用结果argsort
作为具有列名称的Series的索引.
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)
Run Code Online (Sandbox Code Playgroud)
产生
0 1
Date
1990 val4 val2
1991 val3 val4
1992 val1 val2
1993 val1 val4
1994 val2 val4
1995 val4 val3
Run Code Online (Sandbox Code Playgroud)
(我在那里添加了额外的1995 [1,1,2,2]
行.)
或者,您可以melt
使用平面格式,在每个日期组中选出最大的两个值,然后再将其转换.
归档时间: |
|
查看次数: |
4509 次 |
最近记录: |