2016-12-16 2 views
4

У меня есть кадр панды данных, известный как «ДФ»:Панды - сортировка по столбцам

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) вам нужно указать Inplace = True. Это позаботится об этом.

0

Исходя из этих предположений о df:

  1. Колонны x и y являются примечание обязательно заказано.
  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 
Смежные вопросы