2016-12-16 15 views
4

でソート:パンダ - 私は「DF」として知られているパンダのデータフレームを持つ列

x y 
0 1 2 
1 2 4 
2 3 8 

私は2つのフレームにそれを分割して、戻って一緒にマージしようとしています:

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) を使用してソリューションをソートしているときに、あなたが真のインプレース=を指定する必要があります。それはそれを世話するだろう。 df上のこれらの仮定に基づいて

0

  1. xyは必ずしも命じたノートです。
  2. インデックスが注文されています。

ただ、インデックスによって、あなたの結果を注文:

x y 
0 1 2 
1 2 4 
2 3 8 
solutionは次のようになり、今

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() 

関連する問題