Сортировка по 2 колонкам - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть фрейм данных:

start  end
1      10
26     50
6      15
1      5
11     25

Я ожидаю следующий фрейм данных:

start  end
1      10
11     25
26     50
1      5
6      15

здесь порядок сортировки отмечается, но конец n-й строки должен быть началом + 1 из n + 1-гоrow.If не найден, поиск других запусков, где начало один.

Кто-нибудь может подсказать, какую комбинацию сортировки и группы можно использовать для преобразования указанного выше кадра данных в требуемый формат?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете преобразовать df в список и затем сделать:

l=[1,10,26,50,6,15,1,5,11,25]
result=[]
for x in range(int(len(l)/2)):
    result.append(sorted([l[2*x],l[2*x+1]])[1])
    result.append(sorted([l[2*x],l[2*x+1]])[0])

Это даст вам result:

[1, 10, 26, 50, 6, 15, 1, 5, 11, 25]

Чтобы преобразовать исходный df всписок, который вы можете сделать:

startcollist=df['start'].values.tolist()

endcollist=df['end'].values.tolist()

l=[]
for index, each in enumerate(originaldf):
    l.append(each)
    l.append(endcollist[index])

Затем вы можете преобразовать result обратно в фрейм данных:

df=pd.DataFrame({'start':result[1::2], 'end':result[0::2]})

Дать результат:

    end start
0   10  1
1   50  26
2   15  6
3   5   1
4   25  11

Выражение result[1::2] дает каждый нечетный элемент result, result[0::2] дает каждый четный элемент.Для объяснения см. Здесь: https://stackoverflow.com/a/12433705/8565438

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...