非NaN ir Null的第一列的名称



我正在研究如何向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')

最新更新