Python pandas为每一行按降序查找列名

ren*_*van 3 python dataframe pandas

我有下面的pandas数据框,我试图找到每行的降序列名.

A B C D A 1 3 2 1 B 2 1 5 0 C 1 0 1 9 D 2 0 1 2

对于每一行,我试图按排序顺序(降序)获取列索引我应该得到: B C D A C A B D 依此类推这是否可以使用pandas.

我正在尝试这样的事情. test[2].sort_index(axis = 0, ascending = True)

更新12/23
>>> df1
user_handle  1   2   3   4   5   6   8   9   10  12
user_handle
1             6   0   0   1   0   0   0   0   0   0
2             0  95   0   0   1   0   0   0   1   0
3             0   0   2   0   0   0   0   0   0   0
4             1   0   0  12   0   1   0   0   2   0
5             0   1   0   0   9   0   0   0   0   0
6             0   0   0   1   0  14   0   0   1   0
8             0   0   0   0   0   0   4   0   0   0
9             0   0   0   0   0   0   0  12   0   0
10            0   1   0   2   0   1   0   0  49   0
12            0   0   0   0   0   0   0   0   0   2

>>> t1 = np.flip(df1.values.argsort(), 1)


>>> pd.DataFrame(df1.columns[t1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "python3.6/site-packages/pandas/core/frame.py", line 303, in __init__
    dtype=dtype)
  File "python3.6/site-packages/pandas/core/frame.py", line 411, in _init_dict
    return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
  File "python3.6/site-packages/pandas/core/frame.py", line 5506, in _arrays_to_mgr
    return create_block_manager_from_arrays(arrays, arr_names, axes)
  File "python3.6/site-packages/pandas/core/internals.py", line 4310, in create_block_manager_from_arrays
    mgr = BlockManager(blocks, axes)
  File "python3.6/site-packages/pandas/core/internals.py", line 2792, in __init__
    (block.ndim, self.ndim))
AssertionError: Number of Block dimensions (3) must equal number of axes (2)
>>>
KeyboardInterrupt
Run Code Online (Sandbox Code Playgroud)

Flo*_*oor 6

您可以使用 :

temp = np.flip(df.values.argsort(),1)
ndf = pd.DataFrame(df.columns[temp])

   0  1  2  3
0  B  C  D  A
1  C  A  B  D
2  D  C  A  B
3  D  A  C  B
Run Code Online (Sandbox Code Playgroud)