Skip to content

[C++] Add a "list_contains" kernel #33295

Description

@asfimport

Assume you have a list array:

arr = pa.array([["a", "b"], ["a", "c"], ["b", "c", "d"]])

And you want to know for each list if it contains a certain value (of the same type as the list's values). A "list_contains" function (or other name) would be useful for that:

pc.list_contains(arr, "a")
# -> True, True False

The current workaround that I found was flattening, checking equality, and then reducing again with groupby, but this is quite tedious:

>>> temp = pa.table({'index': pc.list_parent_indices(arr), 'contains_value': pc.equal(pc.list_flatten(arr), "a")})
>>> temp.group_by('index').aggregate([('contains_value', 'any')])['contains_value_any'].chunk(0)
<pyarrow.lib.BooleanArray object at 0x7ffaf3f8de20>
[
  true,
  true,
  false
]

But this also only works if there are no empty or missing list values.

Reporter: Joris Van den Bossche / @jorisvandenbossche

Related issues:

Note: This issue was originally created as ARROW-18097. Please see the migration documentation for further details.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions