我有一个数据框,我希望获取每一行的最大值以及最大值所在列的列标题,并返回一个新的数据框。实际上,我的数据框有超过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)
我看过其他帖子,但似乎仍然无法解决。 任何帮助都很好
答案 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))