2016-12-16 249 views
4

我有一個稱爲「DF」一個熊貓數據幀:熊貓 - 排序由

x y 
0 1 2 
1 2 4 
2 3 8 

我分裂它分爲兩幀,然後試圖重新走到一起合併:

df_1 = df[df['x']==1] 
df_2 = df[df['x']!=1] 

我的目標是把它找回來以相同的順序,但是當我Concat的,我得到以下幾點:

frames = [df_1, df_2] 
solution = pd.concat(frames) 
solution.sort_values(by='x', inplace=False) 

    x y 
1 2 4 
2 3 8 
0 1 2 

的問題是我需要'x'值以我提取的相同順序回到新的數據框中。有解決方案嗎?

回答

3

使用.loc指定您想要的順序。選擇原始索引。

solution.loc[df.index] 

或者,如果你在每個組件信任指數值,然後

solution.sort_index() 

enter image description here

設置

df = pd.DataFrame([[1, 2], [2, 4], [3, 8]], columns=['x', 'y']) 

df_1 = df[df['x']==1] 
df_2 = df[df['x']!=1] 

frames = [df_1, df_2] 
solution = pd.concat(frames) 
0

試試這個:

In [14]: pd.concat([df_1, df_2.sort_values('y')]) 
Out[14]: 
    x y 
0 1 2 
1 2 4 
2 3 8 
0

當您使用 solution.sort_values(by='x', inplace=False) 排序的解決方案,你需要指定就地=真。這將照顧它。

0

根據對df這些假設:

  1. xy是音符必然有序。
  2. 索引已訂購。

通過指數只是爲了你的結果:現在

df = pd.DataFrame({'x': [1, 2, 3], 'y': [2, 4, 8]}) 
df_1 = df[df['x']==1] 
df_2 = df[df['x']!=1] 
frames = [df_2, df_1] 
solution = pd.concat(frames).sort_index() 

solution看起來是這樣的:

x y 
0 1 2 
1 2 4 
2 3 8