Skip to content

ENH: add __rshift__, __lshift__, __irshift__ and __ilshift__ #60693

Open
@luxedo

Description

@luxedo

Feature Type

  • Adding new functionality to pandas

  • Changing existing functionality in pandas

  • Removing existing functionality in pandas

Problem Description

Pandas has many in-place operators implemented:

__iadd__,  __isub__,  __imul__,  __itruediv_ __ifloordiv __imod__,  __ipow__,  __iand__,  __ixor__,  __ior__, __imatmul__

As for __rshift__, __lshift__, __irshift__ and __ilshift__ they don't work in version 2.2.2.

>>> import pandas as pd
>>> s = pd.Series([0, 1, 2])
>>> s <<= 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for <<=: 'Series' and 'int'

And numpy implements all methods:

>>> import numpy as np 
>>> s = np.array([0, 1, 2])
>>> s <<= 3
>>> s
array([ 0,  8, 16])

Feature Description

Allow for __rshift__, __lshift__, __irshift__ and __ilshift__ calls in Series and DataFrames

>>> import pandas as pd 
>>> s = pd.Series([0, 1, 2])
>>> s << 3
0    0
1    8
2    16
>>> s <<= 3
>>> s
0    0
1    8
2    16

Alternative Solutions

For now, the solution is to create a new Series operating over the underlying numpy array

>>> pd.Series(s.values << 3)
0     0
1     8
2    16
dtype: int64

Additional Context

It is curious that the last issue that talks about shift operations is from more than 10 years ago (#2337). Indeed it's quite a niche feature and fits more computer scientists rather than data scientists. Anyway, I thought about this feature more for completeness and consistency with python operators rather than usefulness.

Metadata

Metadata

Assignees

No one assigned

    Labels

    EnhancementNeeds TriageIssue that has not been reviewed by a pandas team member

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions