Python 使用pandas获取每行和每列标题的最大值

Python 使用pandas获取每行和每列标题的最大值,python,pandas,Python,Pandas,我有一个数据帧,我希望获得每行的最大值和最大值所在列的列标题,并返回一个新的数据帧。实际上,我的数据框有50多列和30000多行: df1: 因此理想的输出如下所示: df2: 我尝试了以下方法,但没有成功: 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.loo

我有一个数据帧,我希望获得每行的最大值和最大值所在列的列标题,并返回一个新的数据帧。实际上,我的数据框有50多列和30000多行:

df1:

因此理想的输出如下所示:

df2:

我尝试了以下方法,但没有成功:

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)
我看过其他帖子,但似乎仍然无法解决这个问题。
如果
ID
是索引,用缺少的值替换
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))

谢谢,最后你的第二个建议ID=column在哪里工作。
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
df = df1.set_index('ID').agg(['idxmax','max'], axis=1).mask(lambda x: x['max'].eq(0))