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

如何在Pandas DataFrame中对列执行位运算(|、&)?

在Pandas中执行位运算的实用方法

嘿,这个问题其实挺直观的,Pandas对整数列的位运算支持和原生Python几乎一致,我给你拆解几种常见的使用场景:

1. 列与单个值的位运算

如果你想把DataFrame列里的每个元素都和某个二进制值做位运算,直接用|、&这些运算符就行。比如针对你给出的示例DataFrame:

import pandas as pd

df = pd.DataFrame({'A': [0b10, 0b01, 0b10]})
# 给每个元素和0b11做按位或
df['A_or_11'] = df['A'] | 0b11
# 给每个元素和0b01做按位与
df['A_and_01'] = df['A'] & 0b01

运行后A_or_11列的结果会是[3, 3, 3](也就是二进制的0b11),A_and_01列则是[0, 1, 0],完全符合预期。

2. 列与列之间的位运算

如果你的DataFrame有多列需要对位操作,同样可以直接用运算符连接两列。比如我们再加一列B:

df['B'] = [0b01, 0b10, 0b11]
# 两列按位与
df['A_and_B'] = df['A'] & df['B']
# 两列按位或
df['A_or_B'] = df['A'] | df['B']

这里A_and_B的结果是[0, 0, 2](对应二进制0b00, 0b00, 0b10),A_or_B则是[3, 3, 3](全是0b11)。

3. 对整列执行累积位运算(比如你开头提到的连续|操作)

如果想要对一列的所有元素做累积的位运算(比如把列里所有值挨个按位或),可以用两种方式实现:
一种是用Pandas的agg结合lambda函数:

# 累积按位或
cumulative_or = df['A'].agg(lambda arr: arr.bitwise_or.reduce())
# 结果就是0b10 | 0b01 | 0b10 = 0b11(即3),和你开头的例子完全一致

# 累积按位与
cumulative_and = df['A'].agg(lambda arr: arr.bitwise_and.reduce())
# 结果是0b10 & 0b01 & 0b10 = 0b00(即0)

如果处理的是大数据量,更高效的方式是用NumPy的底层reduce方法:

import numpy as np
cumulative_or = np.bitwise_or.reduce(df['A'].values)

这种方式速度会快很多,适合大型数据集。

小提醒

  • 确保你的列是整数类型(比如int64),如果列的类型不对,可能会报错,可以用df['A'] = df['A'].astype(int)来转换。
  • 位运算符的优先级和原生Python一致,如果有混合运算记得加括号,比如(df['A'] | 0b10) & 0b01,避免运算顺序出错。

总的来说,Pandas的位运算操作和原生Python对齐得很好,不管是单个元素、列间操作还是累积运算,都能轻松搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:09