Pandas - 如何根据其中一个给出的顺序对两个DataFrame进行排序?

时间:2015-06-12 09:47:21

标签: python sorting pandas

如果我有一个Pandas DataFrame我希望按其中一个列排序,那么我可以将一个单独的DataFrame与它一起排序,即使排序执行相同的排列另一个DataFrame和正在排序的那个一样?

请注意,我不能依赖两个DataFrame的行索引最初处于相同的顺序。

其他信息 @ ami-tavory的解决方案似乎对.ix索引不起作用。但是,如果我将其更改为.iloc,它确实有效。我无法在@ ami-tavory的示例代码中重现这一点,但我正在使用的数据帧具有以下布局:

>>> fails_sorted_old.dtypes
image                        object
sampling_pattern             object
delta                       float64
reconstruction_algorithm     object
psnr                        float64
ssim                        float64
time                        float64
dtype: object

>>> fails_sorted_old.shape
(126, 7)

当我这样做时:

idx_by_old_psnr = fails_sorted_old.psnr.argsort()

然后:

fails_sorted_old.ix[idx_by_old_psnr]

给了我DataFrameNaN个完整的fails_sorted_old.iloc[idx_by_old_psnr] ,而这很好用:

$(document).ready(function(){
    $(".default a").on("click",function(){
          $(".default").removeClass("active");
          $(this).parent(".default").addClass("active");
    })
});

1 个答案:

答案 0 :(得分:2)

假设您从两个数据帧开始:

df0 = pd.DataFrame({
    'a': [1, 2, 4, 3], 
    'b': ['a', 'b', 'c', 'd']
})
df1 = pd.DataFrame({
    'f': range(4), 
})

那样:

>> df0
    a   b
 0  1   a
 1  2   b
 2  4   c
 3  3   d

>> df1
    f
0   0
1   1
2   2
3   3

现在,使用np.argsort,您可以找到按df0排序的a索引:

import numpy as np

sorted_inds = np.argsort(df0.a)

而且,有了这些,(完成了一次),您可以对数据帧进行排序:

df0 = df0.ix[sorted_inds]
df1 = df1.ix[sorted_inds]

所以你有:

>> df0
    a   b
0   1   a
1   2   b
3   3   d
2   4   c

>> df1
    f
0   0
1   1
3   3
2   2