Создание фрейма данных
test_df = pd.DataFrame([['AAA',np.nan,'AAA'], [np.nan,'BBB',np.nan], [np.nan,np.nan, 'CCC'], ['DDD','DDD','DDD']])
Считать не-NaN элементы в каждой строке как count
test_df['count'] = test_df.notna().sum(axis=1)
Опция 1: Выберите первый элемент в строке как id
(независимо от значения NaN)
test_df['id'] = test_df[0]
Option-2: Выберите первый не-NaN элемент как id
для каждой строки
test_df['id'] = test_df.apply(lambda x: x[x.first_valid_index()], axis=1)