Пример входного фрейма данных выглядит следующим образом:
df_input = pd.DataFrame([[1,2,3,4,5], [2,1,4,7,6], [5,6,3,7,np.nan], [np.nan,np.nan,np.nan,np.nan]], columns=["A", "B","C","D","E"])
Ожидаемый вывод
df_output=pd.DataFrame([[-1,-1,0,1,1],[-1,-1,0,1,1],[-1,1,-1,1,0],[0,0,0,0,0]],columns=["A", "B","C","D","E"])
Вот что я пытаюсь.
1) Сортировка каждой строки.
2) Присвойте -1 половине наименьших действительных наблюдений и +1 наибольших действительных наблюдений.
3) NaN должен иметь ноль.
4) В случаенечетное количество столбцов, медиана должна иметь ноль.
Следующий код хорошо работает для четного числа столбцов.
df_input[:] = np.where(df_input.rank(axis=1) > df_input.shape[1] / 2, 1, -1)
Как мне расширить это до нечетного числа столбцов и учесть NaN.Заранее спасибо.