Я покажу вам полное решение здесь, а затем объясню его части ниже:
def reverse_bits(bits):
trimmed_bits = bits[2:-2]
list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]
reversed_bits = [list_of_bits[-i] for i in range(1,len(list_of_bits)+1)]
return ''.join(reversed_bits)
df['hexa-rev'] = df['hexa'].apply(lambda x: reverse_bits(x))
Возможно, есть несколько способов сделать это, но этот способ должен решить вашу проблему. Общая стратегия будет определять функцию, а затем использовать метод apply (), чтобы применить ее ко всем значениям в столбце. Это должно выглядеть примерно так:
df['hexa-rev'] = df['hexa'].apply(lambda x: reverse_bits(x))
Теперь нам нужно определить функцию, которую мы собираемся применить к нему. Разбивая его на части, мы удаляем первый и последний бит по индексу. Из-за того, как работают отрицательные индексы, это исключит первый и последний бит, независимо от размера. Ваш результат - список символов, которые мы объединим после обработки.
def reverse_bits(bits):
trimmed_bits = bits[2:-2]
Вторая строка перебирает список символов, сопоставляет первый и второй символ каждого бита вместе, а затем объединяет их в одну строку, представляющую бит.
def reverse_bits(bits):
trimmed_bits = bits[2:-2]
list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]
Со второй по последнюю строку возвращается список, который вы только что создали в обратном порядке. Наконец, функция возвращает одну строку битов.
def reverse_bits(bits):
trimmed_bits = bits[2:-2]
list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]
reversed_bits = [list_of_bits[-i] for i in range(1,len(list_of_bits)+1)]
return ''.join(reversed_bits)
Я объяснил это в обратном порядке, но вы хотите определить эту функцию, которую хотите применить к вашему столбцу, а затем использовать функцию apply (), чтобы это произошло.