Я получил список идентификаторов и списки дат. Оба являются отдельными записями отдельных столбцов данных pandas. Каждой дате соответствует идентификатор. Что-то типа:

[852634, 727417, 881231]   [2018-05-29, 2015-11-23, 2019-06-26]

Как я могу упорядочить даты (по возрастанию или по убыванию, не имеет значения) и экспортировать тот же порядок в идентификаторы?

Желаемый результат:

[727417, 852634, 881231]   [ 2015-11-23, 2018-05-29, 2019-06-26]

Заранее спасибо за все предложения, Алессандро

0
Alessandro Togni 19 Янв 2022 в 20:04

4 ответа

Используйте numpy -

l1_key = np.argsort(l1)

l1_sorted = np.array(l1)[l1_key]
l2_sorted = np.array(l2)[l1_key]

Вывод

print(l1_sorted)
print(l2_sorted)

[727417 852634 881231]
['2015-11-23' '2018-05-29' '2019-06-26']
1
Vivek Kalyanarangan 19 Янв 2022 в 20:09

Почтовый индекс...

>>> x = [852634, 727417, 881231]
>>> y = ["2018-05-29", "2015-11-23", "2019-06-26"]
>>> list(zip(y, x))
[('2018-05-29', 852634), ('2015-11-23', 727417), ('2019-06-26', 881231)]

Сортировать...

>>> sorted(zip(y,x))
[('2015-11-23', 727417), ('2018-05-29', 852634), ('2019-06-26', 881231)]

И распаковать.

>>> [x for _, x in sorted(zip(y,x))]
[727417, 852634, 881231]

Это пример общего метода, называемого преобразованием Шварца. Вы украшаете список идентификаторов, которые хотите отсортировать, соответствующими датами, сортируете украшенный список, затем извлекаете (не украшаете) исходные значения из результата.

1
chepner 19 Янв 2022 в 20:11

Вы можете сделать list.sort() для int идентификаторы = ids.sort ()

Вы можете использовать datetime для сравнения второго:

from datetime import datetime
dates = [datetime.strftime(date,"Y%-M%-D%") for date in dates]
0
XxJames07- 19 Янв 2022 в 20:09

Если у вас уже есть кадр данных, вероятно, будет намного проще .explode() их и .sort_values() перед экспортом!

>>> import pandas as pd
>>> df = pd.DataFrame({"ids": [[852634, 727417, 881231], [90,100,110,115]], "dates": [["2018-05-29", "2015-11-23", "2019-06-26"], ["2015-01-01", "2021-01-01", "2020-01-01", "2021-01-01"]]})
>>> df
                        ids                                             dates
0  [852634, 727417, 881231]              [2018-05-29, 2015-11-23, 2019-06-26]
1       [90, 100, 110, 115]  [2015-01-01, 2021-01-01, 2020-01-01, 2021-01-01]
>>> df.explode(["ids", "dates"]).sort_values("dates")
      ids       dates
1      90  2015-01-01
0  727417  2015-11-23
0  852634  2018-05-29
0  881231  2019-06-26
1     110  2020-01-01
1     100  2021-01-01
1     115  2021-01-01
>>> df.explode(["ids", "dates"]).sort_values("dates")["ids"].to_numpy()
array([90, 727417, 852634, 881231, 110, 100, 115], dtype=object)
0
ti7 19 Янв 2022 в 20:25