[英]How to merge two dataframes with preserving the same order of one of them?
[英]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]
給了我一個充滿NaN
的DataFrame
,這很好用:
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.