Python 获取不作为新列的值的列名

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

我有下面的数据框,我想要另一列显示非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       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的方法:

  • 与轴=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
    

    您应该包含您尝试过的代码,这些代码可以完美地工作。谢谢你,好心的先生!下一次我会把我的代码写进我的坏代码里。我没想过在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