You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python翻转DataFrame列中二进制数的最后1/2位?

实现方案

方法一:基于数值运算(高效推荐)

翻转二进制最后1位等价于对原数值Q执行异或1操作(二进制000001),翻转最后2位等价于异或3操作(二进制000011),之后再转成6位固定长度的二进制字符串即可,这种方式比直接操作字符串效率更高。

示例代码:

import pandas as pd
import numpy as np

# 生成原始DataFrame
df = pd.DataFrame(np.random.randint(1,3,size=(10, 8)), columns=list('ABCDEFGH'))
df['Q'] = df.sum(axis=1)
df['R'] = df.Q.apply(lambda x: format(int(x), '06b'))

# 翻转最后1位,生成新列
df['R_flipped_last1'] = df['Q'].apply(lambda x: format(x ^ 1, '06b'))
# 翻转最后2位,生成新列
df['R_flipped_last2'] = df['Q'].apply(lambda x: format(x ^ 3, '06b'))

比如原Q=12(二进制001100),翻转最后1位后变为13(001101),翻转最后2位后变为15(001111),完全符合需求。

方法二:直接操作二进制字符串

如果想直接对R列的字符串进行修改,可以通过截取字符串前缀,再翻转最后1或2位字符:

# 翻转最后1位
df['R_flipped_last1'] = df['R'].apply(lambda s: s[:-1] + ('1' if s[-1] == '0' else '0'))

# 翻转最后2位
def flip_last_two_bits(s):
    last_two = s[-2:]
    flipped_bits = ''.join('1' if c == '0' else '0' for c in last_two)
    return s[:-2] + flipped_bits

df['R_flipped_last2'] = df['R'].apply(flip_last_two_bits)

这种方式更直观,适合理解字符串操作逻辑,但处理大数据量时,效率不如数值运算方法。

内容的提问来源于stack exchange,提问作者Rupak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:50:44