我正在研究如何向df添加一列,该列包含第一列的列名,而不是NaN或Null。示例:列";第一个";基于的"A"、"B"、"C"、"D"列
将
Null, Nan
值转换为misisng值,必要时将Name
转换为索引,然后测试DataFrame.notna
并通过DataFrame.idxmax
获得第一个匹配列,最后设置NaN
(如果每行所有NaN
秒:(df = df.replace(['Null', 'Nan'], np.nan) df = df.set_index('Name') m = df.notna() df['First'] = m.idxmax(axis=1).where(m.any(axis=1)) print (df) A B C D First Name Alex 100 Nan NaN NaN A Michael 300 400 NaN NaN A Steve NaN 100 100 100 B John NaN NaN NaN NaN NaN
如果需要不替换的原始值:
df = df.set_index('Name') m = df.isin(['Null', 'Nan']) | df.isna() df['First'] = (~m).idxmax(axis=1).mask(m.all(axis=1), 'Null')