如果我有一个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]
给了我DataFrame
个NaN
个完整的fails_sorted_old.iloc[idx_by_old_psnr]
,而这很好用:
$(document).ready(function(){
$(".default a").on("click",function(){
$(".default").removeClass("active");
$(this).parent(".default").addClass("active");
})
});
答案 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