Em Polars, posso usar zip_width
para tirar valores de s1
ou s2
de acordo com uma máscara:
In [1]: import polars as pl
In [2]: import pyarrow as pa
In [3]: import pyarrow as pc
In [4]: s1 = pl.Series([1,2,3])
In [5]: mask = pl.Series([True, False, False])
In [6]: s2 = pl.Series([4, 5, 6])
In [7]: s1.zip_with(mask, s2)
Out[7]:
shape: (3,)
Series: '' [i64]
[
1
5
6
]
Como posso fazer isso com PyArrow? Eu tentei pyarrow.compute.replace_with_mask
, mas funciona de maneira diferente:
In [10]: import pyarrow.compute as pc
In [11]: import pyarrow as pa
In [12]: a1 = pa.array([1,2,3])
In [13]: mask = pa.array([True, False, False])
In [14]: a2 = pa.array([4,5,6])
In [15]: pc.replace_with_mask(a1, pc.invert(mask), a2)
Out[15]:
<pyarrow.lib.Int64Array object at 0x7f69d411afe0>
[
1,
4,
5
]
Como replicar zip_with
no PyArrow?
Você pode usar
if_else
a função de computação do PyArrow:A
if_else
função compacta efetivamente os arrays com base na máscara, replicando o comportamento de Polars'zip_with
.