#python #python-3.x #pandas #dataframe
Вопрос:
Привет, у меня есть фрейм данных pandas с несколькими столбцами, в котором у меня есть столбец типа объекта, в котором значения разделены»,». Я хочу отсортировать значения столбца в алфавитном порядке.
Фрейм данных, который у меня есть :
ID things
1 pen,car,robot
2 lamp,jug,phone
3 switch,pen,book
Фрейм данных, который я хочу:
ID things
1 car,pen,robot
2 jug,lamp,phone
3 book,pen,switch
Заранее спасибо.
Ответ №1:
Разделить, отсортировать, а затем присоединиться:
df['things'] = df.things.apply(lambda x: ','.join(sorted(x.split(','))))
df
ID things
0 1 car,pen,robot
1 2 jug,lamp,phone
2 3 book,pen,switch
Небольшой ориентир по сравнению .str
с методом:
timeit("df.things.apply(lambda x: ','.join(sorted(x.split(','))))", number=10000, globals=globals())
4.744999999995343
timeit("df['things'].str.split(',').map(np.sort).str.join(',')", number=10000, globals=globals())
14.570999999996275
Ответ №2:
Вы можете разделить str.split()
, отсортировать с .map()
помощью numpy.sort()
и объединить тексты str.join()
следующим образом:
df['things'] = df['things'].str.split(',').map(np.sort).str.join(',')
Все используемые функции являются быстрыми векторизованными функциями Pandas/numpy.
Результат:
print(df)
ID things
0 1 pen,car,robot
1 2 lamp,jug,phone
2 3 switch,pen,book
Комментарии:
1. @Psidom Спасибо! Извлек из этого урок 🙂