Строка внутри фрейма данных с двоеточиями до целых чисел

#python #pandas #dataframe #sorting

Вопрос:

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

 C1 C2 A 2:3:1:7 B 2:1:4:3 C 2:1:1:1  

Мне нужно отсортировать целые числа C2 , оставив двоеточия.

Результат должен выглядеть следующим образом:

 C1 C2 A 1:2:3:7 B 1:2:3:4 C 1:1:1:2  

Приведенный выше пример предназначен для понимания, это результат, который у меня есть до сих пор:

 {'_c1': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}, '_c2': {0: '2:3:7:9:1:8:6:1', 1: '5:1:3:9:4:6:8', 2: '6:7:5:0:9', 3: '3:1:5:5:2:7', 4: '1:2:8:3:8:9:7:3:4:6:5:5:1:5'}}  

Ответ №1:

 df['C2'] = df['C2'].str.split(':').apply(lambda x: x.sort() or x).str.join(':')  

Выход:

 gt;gt;gt; df  C1 C2 0 A 1:2:3:7 1 B 1:2:3:4 2 C 1:1:1:2  

Комментарии:

1. df.assign(C2 = df.C2.str.split(':').map(sorted).str.join(':'))

2. Я получаю эту ошибку: «Можно использовать доступ .str только со строковыми значениями!», но я уже использую astype str, у вас есть какие-либо предложения?

3. Пришлите мне print(df.head().to_dict()) , пожалуйста, выходные данные.

4. Дай мне одну минуту.

5. Попробуйте этот код: df['_c2'] = df['_c2'].str.split(':').apply(lambda x: x.sort() or x).str.join(':')

Ответ №2:

Никаких бабушек, вы можете использовать:

 df['C2_new'] = [':'.join(sorted(x.split(':'))) for x in df['C2']]  

Выход:

 C1 C2 C2_new 0 A 2:3:1:7 1:2:3:7 1 B 2:1:4:3 1:2:3:4 2 C 2:1:1:1 1:1:1:2