使用熊猫获取每个行和列标题的最大值

时间:2020-09-24 11:16:03

标签: python pandas

我有一个数据框,我希望获取每一行的最大值以及最大值所在列的列标题,并返回一个新的数据框。实际上,我的数据框有超过50列和超过30,000行:

df1:

ID   Tis   RNA   DNA   Prot   Node   Exv     
AB   1.4   2.3   0.0   0.3   2.4   4.4
NJ   2.2   3.4   2.1   0.0   0.0   0.2
KL   0.0   0.0   0.0   0.0   0.0   0.0
JC   5.2   4.4   2.1   5.4   3.4   2.3

所以理想的输出看起来像这样:

df2:

ID  
AB   Exv   4.4
NJ   RNA   3.4
KL   N/A    N/A
JC   Prot   5.4

我尝试了以下操作,但均未成功:

df2 = df1.max(axis=1)
result.index = df1.idxmax(axis=1)

也尝试过:

df2=pd.Series(df1.columns[np.argmax(df1.values,axis=1)])
final=pd.DataFrame(df1.lookup(s.index,s),s)

我看过其他帖子,但似乎仍然无法解决。 任何帮助都很好

1 个答案:

答案 0 :(得分:2)

如果ID是索引DataFrame.agg,并用丢失的值替换0行,则使用:

df = df1.agg(['idxmax','max'], axis=1).mask(lambda x: x['max'].eq(0))
print (df)
   idxmax  max
AB    Exv  4.4
NJ    RNA  3.4
KL    NaN  NaN
JC   Prot  5.4

如果ID是列,则使用:

df = df1.set_index('ID').agg(['idxmax','max'], axis=1).mask(lambda x: x['max'].eq(0))