python - 查找每行具有第二个最大值的列名( Pandas )

标签 python pandas dataframe

基于这篇文章: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/

相关文章:

Python:不使用循环的列和行操作

python - Pandas 的均值归一化

r - 转换数据框以使用第一列值作为列名

python - 移位插值没有给出预期的行为

python - Pandas:如何在滚动窗口中选择一列

python - Pandas groupby + resample/TimeGrouper 用于从开始起几个月的变化

r - 两个数据帧之间的行相关性

python - Django 可以将多个 LDAP 身份验证映射到单个 User 对象吗?

Python - 正则表达式 - 对日本地址进行排序

python - 如何覆盖 Flask 蓝图 URL?