将按行排序的数据框映射到原始列标签(Pandas),但仅限于值大于零的那些

Mapping row-wise sorted dataframe to original column labels (Pandas), but only those having value greater than zero

我在这里问了一个问题 但是,我希望通过只显示那些对应值大于 0 的列索引来扩展这个问题。

我有一个数据框 -

df 
   A  B  C   D
0  8  3  6   2
1  1 -3  5   2
2  4  9  5  10
3  2 -4 -8  -2

我按降序对每一行进行排序,而不是保存值,我保存相应的列名,但条件是排除那些对应值为负的列名。

最终结果为:

df_col 
       1  2  3   4
    0  A  C  B   D
    1  C  D  A   
    2  D  B  C   A
    3  A  

您可以使用:

df = df.apply(lambda x: pd.Series(x[x > 0].sort_values(ascending=False).index), axis=1)
print (df)
   0    1    2    3
0  A    C    B    D
1  C    D    A  NaN
2  D    B    C    A
3  A  NaN  NaN  NaN