簡體   English   中英

熊貓-如何根據其中一個給定的順序對兩個DataFrame進行排序?

[英]Pandas - how to sort two DataFrames according to the order given by one of them?

如果我有一個希望按其列之一排序的Pandas DataFrame ,那么是否可以將一個單獨的DataFrame一起排序,即,以便排序對另一個DataFrame的排序與對另一個DataFrame排序相同?

請注意,我最初不能依賴兩個DataFrame的行索引。

其他信息 @ ami-tavory的解決方案似乎不適用於.ix索引。 但是,如果我將其更改為.iloc.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]

給了我一個充滿NaNDataFrame ,這很好用:

fails_sorted_old.iloc[idx_by_old_psnr]

假設您從兩個數據幀開始:

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 ,您可以找到按a排序的df0索引:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM