Pandas Dataframe - сортировать элемент списка по дате, когда дата является подстрокой элемента - PullRequest
1 голос
/ 01 декабря 2019

Я хочу отсортировать данные в каждой ячейке в столбце с именем SESSIONS на основе даты (YYYY_MM_DD), и эта дата находится внутри элементов (строк), формирующих список. Столбец SESSIONS может иметь различное количество сеансов, а также может быть пустым. В одной ячейке столбца SESSIONS находится список сеансов (как в «li», который я привел в качестве примера для тестирования). Ниже показано, как это работало нормально при выполнении вне df (2019_04_20 отображается как последний):

li = ['WE233JP_2015_03_03__13_31_21','WE238JP_2019_04_20__16_40_59','WE932LT_2017_10_12__08_35_49']
li.sort(key = lambda x: datetime.strptime(re.sub(r'^([^_]+)_(.+)__(.+)', r'\2', x), '%Y_%m_%d'))
print(li)

Когда я пытаюсь применить его к df с кодами ниже (2 попытки):

df['sessions'] = df.sessions.fillna('NULL').sort_values().apply(lambda x: sorted(datetime.strptime(re.sub(r'^([^_]+)_(.+)__(.+)', r'\2', x), '%Y_%m_%d')))
df['sessions'] = df.sessions.fillna('NULL').sort_values().apply(lambda x: sorted(re.sub(r'^([^_]+)_(.+)__(.+)', r'\2', x)))

В обоих случаях я получил erorr: TypeError: ожидаемая строка или байтовоподобный объект

Простая сортировка без даты, как показано ниже, работает ОК:

df['sessions'] = df.sessions.fillna('NULL').sort_values().apply(lambda x: sorted(x))

Любые предложения, как отсортировать df по извлеченной части строки в формате даты?

1 Ответ

1 голос
/ 02 декабря 2019

Давайте попробуем серию map с пользовательской функцией ключа сортировки

Sample `df`:
     sessions
0  [WE233JP_2015_03_03__13_31_21, WE238JP_2019_04_20__16_40_59, WE932LT_2017_10_12__08_35_49]
1  NaN

import re    
sort_func = lambda x: pd.to_datetime(re.findall(r'^[^_]+_(.+)__.+', x)[0], 
                                    format='%Y_%m_%d', errors='coerce')
df['sorted_sessions'] = df.sessions.map(lambda y: sorted(y, key=sort_func) 
                                                  if y is not np.nan else y)

Out[1455]:    
sessions  \
0  [WE233JP_2015_03_03__13_31_21, WE238JP_2019_04_20__16_40_59, WE932LT_2017_10_12__08_35_49]
1  NaN                                                                                  

sorted_sessions
0  [WE233JP_2015_03_03__13_31_21, WE932LT_2017_10_12__08_35_49, WE238JP_2019_04_20__16_40_59]
1  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...