基于这篇文章:Find the column name which has the maximum value for each row很清楚如何使用 df.idxmax(axis=1)
获取具有每行最大值的列名。
问题是,我怎样才能得到每行的第 2 个、第 3 个等等最大值?
最佳答案
你需要numpy.argsort
对于位置,然后通过 indexing
重新排序列名:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('ABCDE'))
print (df)
A B C D E
0 8 8 3 7 7
1 0 4 2 5 2
2 2 2 1 0 8
3 4 0 9 6 2
4 4 1 5 3 4
arr = np.argsort(-df.values, axis=1)
df1 = pd.DataFrame(df.columns[arr], index=df.index)
print (df1)
0 1 2 3 4
0 A B D E C
1 D B C E A
2 E A B C D
3 C D A E B
4 C A E D B
验证:
#first column
print (df.idxmax(axis=1))
0 A
1 D
2 E
3 C
4 C
dtype: object
#last column
print (df.idxmin(axis=1))
0 C
1 A
2 D
3 B
4 B
dtype: object
关于python - 查找每行具有第二个最大值的列名( Pandas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48764923/