2015-06-12 12 views
1

如果我有一個Pandas DataFrame,我希望按其中一列進行排序,那麼我可以有一個單獨的DataFrame與它一起排序,即,使得排序在其他DataFrame上執行相同的排列正在排序?熊貓 - 如何根據其中一個給出的順序對兩個DataFrame進行排序?

請注意,我不能依靠兩個DataFrame s的行索引最初是在相同的順序。

其他信息 通過@解決方案AMI-tavory似乎並沒有對我.ix編入索引。但是,如果我將其更改爲.iloc,它確實有效。我不能重現這個對@ AMI-tavory的示例代碼,但我一起工作的dataframes有這樣的佈局:

>>> 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 s雖然這工作正常:

fails_sorted_old.iloc[idx_by_old_psnr] 

回答

2

假設你有兩個dataframes開始:

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,你可以找到的df0a排序的指標:

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 
+0

奇怪的是,當使用'你做上述結果.ix' I指數我dataframes是一個數據幀充滿了'NaN's。如果我用'.iloc'代替'.ix',它似乎可以工作。 –

+0

發表一個小問題的例子? –

+0

我似乎無法用你的例子重現它,但我想要玩的更大的數據框失敗。 –

相關問題