-
Notifications
You must be signed in to change notification settings - Fork 4k
Description
ARROW-10640 added a ternary if_else kernel. Add another kernel that extends this concept to an arbitrary number of conditions and associated results, like a vectorized if-ifelse-...-else with an arbitrary number of ifelse and with the else optional. This is like a SQL CASE statement.
How best to achieve this is not obvious. To enable SQL-style uses, it would be most efficient to implement this as a variadic kernel where the even-number arguments (0, 2, ...) are the arrays of boolean conditions, the odd-number arguments (1, 3, ...) are the corresponding arrays of results, and the final argument is the else result. But I'm not sure if this is practical. Maybe instead we should implement this to operate on listarrays, like NumPy's [np.where|https://numpy.org/doc/stable/reference/generated/numpy.where.html] or [np.select|https://numpy.org/doc/stable/reference/generated/numpy.select.html].
Reporter: Ian Cook / @ianmcook
Assignee: David Li / @lidavidm
Related issues:
- [C++] C++ array kernels framework and execution buildout (umbrella issue) (is a child of)
- [C++] Add a 'choose' kernel/scalar compute function (relates to)
- [R] Add binding for case_when() (is depended upon by)
PRs and other links:
Note: This issue was originally created as ARROW-13064. Please see the migration documentation for further details.