Я получил список идентификаторов и списки дат. Оба являются отдельными записями отдельных столбцов данных 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]
Заранее спасибо за все предложения, Алессандро
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']
Почтовый индекс...
>>> 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]
Это пример общего метода, называемого преобразованием Шварца. Вы украшаете список идентификаторов, которые хотите отсортировать, соответствующими датами, сортируете украшенный список, затем извлекаете (не украшаете) исходные значения из результата.
Вы можете сделать list.sort()
для int идентификаторы = ids.sort ()
Вы можете использовать datetime для сравнения второго:
from datetime import datetime
dates = [datetime.strftime(date,"Y%-M%-D%") for date in dates]
Если у вас уже есть кадр данных, вероятно, будет намного проще .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)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.