Предположим, у меня есть кадр данных, например
id p1 p2 p3 p4
1 0 9 0 4
2 0 0 0 4
3 1 3 10 7
4 1 5 3 1
5 2 3 7 10
Хотите найти имена столбцов первых n столбцов с наибольшим значением в каждой строке фрейма данных pandas и хотите исключить нулевое значение из первых 3.
id top1 top2 top3
1 p2 p4
2 p4
3 p3 p4 p2
4 p2 p3 p4/p1
5 p4 p3 p2
Настоящие решения возвращают имена столбцов, которые также имеют нуль. Есть ли способ исключить нулевые значения. есть это решение
arank = df.apply(np.argsort, axis = 1)
ranked_cols = df.columns.to_series()[arank.values[:,::-1][:,:3]]
new_df = pd.DataFrame(ranked_cols, index=df.index)
есть и другие решения, такие как Найдите имена первых n столбцов с наибольшим значением в каждой строке кадра данных pandas. Можно ли их изменить, чтобы исключить столбцы с нулевым значением?