【问题标题】:Bitwise operations in Pandas that return numbers rather than bools?Pandas 中返回数字而不是书籍的按位运算?
【发布时间】:2014-04-09 11:59:02
【问题描述】:

问题

如何在 Pandas 中执行按位运算?

& 如何处理整数

& 运算符在整数上执行按位掩码

>>> mask = 0b1100  # 4 and 8 bits on
>>> 7 & mask
4

& 在 Pandas 中的工作原理

有没有办法在 Pandas 中执行按位屏蔽操作? & 运算符做了其他事情。

>>> df = DataFrame([1, 2, 3, 4, 5, 6, 7, 8], columns=['data'])
>>> df.data & mask
0    False
1    False
2    False
3     True
4     True
5     True
6     True
7     True
Name: data, dtype: bool

【问题讨论】:

    标签: python pandas bit-manipulation


    【解决方案1】:
    In [184]: df = pd.DataFrame([1, 2, 3, 4, 5, 6, 7, 8], columns=['data'])
    
    In [185]: mask = 0b1100
    
    In [186]: np.bitwise_and(df['data'], mask)
    Out[186]: 
    0    0
    1    0
    2    0
    3    4
    4    4
    5    4
    6    4
    7    8
    Name: data, dtype: int64
    

    它甚至返回一个系列——非常酷!

    【讨论】:

    • 或者,df["data"].values & 0b1100
    • 还有一个建议df['data'] = df['data'].apply(lambda x: x & mask)
    • 如果性能是一个问题,我建议不要探索 apply & lambda 的用法。在一系列 238517 条记录中,使用 timeit 模块,我使用接受的或 .values & mask 建议测量了右移和掩码值约 500 微秒。但是,apply+lambda 方法始终需要大约 1 秒。从微秒测量跳到秒。
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2022-03-19
    • 2014-12-15
    • 2019-10-11
    • 2013-07-22
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多