按系列对 pandas 数据框进行排序

Per*_*ere 6 pandas

Pandas 数据框可以按其列的值进行排序,但我想按我不想添加到数据框的一系列值对数据框进行排序 - 尽管它具有相同的索引。

我通过将系列添加到数据框(作为列)、排序并再次删除列来对数据框进行排序。示例代码中nprojnpercent是我的数据框,total是我的系列:

nprojnpercent["total"]=total
nprojnpercent.sort_values(by="total",ascending=False,inplace=True)
nprojnpercent.pop("total")
Run Code Online (Sandbox Code Playgroud)

它有效,但对我来说似乎很奇怪。有没有更简单的方法来按系列排序数据框?

Ale*_*der 5

sort_values返回排序后的系列,因此获取该系列的索引并将其命名为idxs由于的索引与 的索引相对应,因此您可以与 一起df使用,然后根据 s 的排序值重新排列行。locidx

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC'))
s = pd.Series(np.random.randn(5), name='C')

>>> df
          A         B         C
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274
4  0.761038  0.121675  0.443863

>>> s
0    0.333674
1    1.494079
2   -0.205158
3    0.313068
4   -0.854096
Name: C, dtype: float64

idx = s.sort_values().index

>>> df.loc[idx]
          A         B         C
4  0.761038  0.121675  0.443863
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
Run Code Online (Sandbox Code Playgroud)