对于十六进制数,如何按位反转列中的每个值?

How do I reverse each value in a column bit wise for a hex number?

我有一个数据框,其中有一个名为 hexa 的列,它具有这样的十六进制值。它们是 dtype 对象。

               hexa
0  00802259AA8D6204
1  00802259AA7F4504
2  00802259AA8D5A04

我想删除第一位和最后一位并将值按位反转如下:

         hexa-rev
0  628DAA592280
1  457FAA592280
2  5A8DAA592280

请帮忙

我将在此处向您展示完整的解决方案,然后在下面解释其各个部分:

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])]

倒数第二行returns 您刚刚以相反顺序制作的列表。最后,函数 returns 单个位串。

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() 函数实现它。