Python 获取不作为新列的值的列名
我有下面的数据框,我想要另一列显示非NaN值的列名。 像这样:Python 获取不作为新列的值的列名,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有下面的数据框,我想要另一列显示非NaN值的列名。 像这样: New Column y32 y9 y11 y9 等等 y9 y2 y11 y32 1 NaN NaN NaN 0.201229 2 0.053303 NaN NaN NaN 4 NaN NaN 0.442415 NaN 6 0.000529
New Column
y32
y9
y11
y9
等等
y9 y2 y11 y32
1 NaN NaN NaN 0.201229
2 0.053303 NaN NaN NaN
4 NaN NaN 0.442415 NaN
6 0.000529 NaN NaN NaN
我试着用for循环,但没能完全达到目的。
非常感谢您的帮助。您可以将
idxmax
与skipna=True
一起使用,并将其应用于每一行:
def f(r):
return r.idxmax(skipna=True)
df['New Column'] = df.apply(f, axis=1)
或一行:
df['New Column'] = df.apply(lambda r: r.idxmax(skipna=True), axis=1)
UPD:
更好的方法是使用系列。首先\u有效\u索引()
:
以下是几种不使用pandas.DataFrame.apply的方法:
y9 y2 y11 y32 New Column
1 NaN NaN NaN 0.201229 y32
2 0.053303 NaN NaN NaN y9
4 NaN NaN 0.442415 NaN y11
6 0.000529 NaN NaN NaN y9
您应该包含您尝试过的代码,这些代码可以完美地工作。谢谢你,好心的先生!下一次我会把我的代码写进我的坏代码里。我没想过在axis上使用idxmax。我更喜欢这个解决方案
>>> df["New Column"] = df.idxmax(1)
>>> df["New Column"] = df.columns[np.where(df.notna())[1]]
y9 y2 y11 y32 New Column
1 NaN NaN NaN 0.201229 y32
2 0.053303 NaN NaN NaN y9
4 NaN NaN 0.442415 NaN y11
6 0.000529 NaN NaN NaN y9