如何在不更改pandas中的其他列的情况下对一列进行排序?

D. *_*Rao 2 python sorting dataframe pandas

示例:当前df如下所示:

    df=
    A B
    1 5
    2 6
    3 8
    4 1
Run Code Online (Sandbox Code Playgroud)

我希望得到的df是这样的(B被排序,A保持不变):

    df=
    A B
    1 8
    2 6
    3 5
    4 1
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 8

你需要打破一个内部的Pandas安全机制 - aligning by index它负责管理data consistency.因此,分配1D Numpy数组或vanilla Python列表可以解决问题,因为它们都没有索引,因此Pandas无法进行对齐:

df['B'] = df['B'].sort_values(ascending=False).values
Run Code Online (Sandbox Code Playgroud)

要么

df['B'] = df['B'].sort_values(ascending=False).tolist()
Run Code Online (Sandbox Code Playgroud)

两个产量:

In [77]: df
Out[77]:
   A  B
0  1  8
1  2  6
2  3  5
3  4  1
Run Code Online (Sandbox Code Playgroud)

  • 或者使用NumPy:`np.sort(df ['B'].values)[:: - 1]`.+1无论如何. (2认同)
  • 虽然给出了这个例子......它几乎看起来像`A`应该是索引,然后按正常排序'B` ...否则 - 将`A`保持为未排序的列是非常奇怪的B` ......略微感觉这是一个XY问题,但是谁知道......虽然这让我认为它是"呃":)但这确实直接正确地回答了Q. (2认同)