Skip to content

Rewrite GroupBy.nth as a pandas-compatible positional row filter - #23257

Merged
rapids-bot[bot] merged 7 commits into
NVIDIA:mainfrom
galipremsagar:groupby-nth-fixes
Jul 16, 2026
Merged

Rewrite GroupBy.nth as a pandas-compatible positional row filter#23257
rapids-bot[bot] merged 7 commits into
NVIDIA:mainfrom
galipremsagar:groupby-nth-fixes

Conversation

@galipremsagar

Copy link
Copy Markdown
Contributor

Description

Running pandas' own test suite under cudf.pandas, tests/groupby/methods/test_nth.py had 43 failing tests. This PR fixes all of them (203/203 pass) and removes the 42 corresponding xfail entries from the pandas-testing plugin.

Why the failures could not fall back to pandas

pandas' GroupBy.nth is a class-level property returning a GroupByNthSelector (supporting both gb.nth(n, dropna=...) and gb.nth[n]), not a method. cudf.pandas' attribute machinery only builds fallback-capable method proxies for functions, so resolving gb.nth leaked cuDF's raw bound method: cuDF exceptions (e.g. NotImplementedError for dropna=) escaped directly to user code instead of triggering the transparent pandas fallback, and the index form gb.nth[...] failed with "method object is not subscriptable".

GroupBy.nth rewrite (cuDF classic)

nth is now, like pandas, a property returning a selector supporting both call and index forms, implemented as a positional-mask row filter over the grouped offsets (the same machinery as head/tail):

  • accepts ints, list-likes of ints, and non-negative-step slices, with pandas' exact validation errors (TypeError: Invalid index ..., ValueError: Invalid step ...);
  • acts as a row filter: keeps the original index, row order, dtypes, and values — the previous implementation re-grouped and aggregated, returning rows in group-key order;
  • never mutates the grouped object (the old implementation temporarily inserted a __groupbynth_order__ column into the user's frame, and crashed on SeriesGroupBy);
  • honors the groupby's dropna for NaN group keys;
  • gathers surviving rows from the pre-nans_to_nulls object, so a NaN in the original data stays NaN instead of becoming null.

dropna="any"/"all" still raises NotImplementedError in cuDF classic; under cudf.pandas this now correctly falls back to pandas via a dispatching selector registered on both GroupBy proxies (scalar nth stays on the GPU).

Aggregation dtype fixes

  • Reattach the timezone on aggregated tz-aware datetime columns: libcudf has no timezone notion and returns tz-naive timestamps holding the same UTC instants, so first/last/min/max/nth on datetime64[ns, tz] columns lost the tz.
  • Keep object dtype for string-producing aggregations on object-dtype columns instead of re-typing to str, matching pandas.

Validation

  • pandas-tests tests/groupby/methods/test_nth.py: 43 failed → 203/203 pass (stable across test orderings).
  • pandas-tests tests/groupby/methods/ (full directory): remaining failures are exactly the pre-existing known-failure entries; zero new failures.
  • cuDF classic: groupby suite (1,534), and dataframe/series/reshape/indexes suites (66,515 tests) — no regressions. New classic regression tests cover the selector index form and argument validation.

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

Fixes all 43 failures in pandas' tests/groupby/methods/test_nth.py under
cudf.pandas (203/203 pass) and removes the 42 corresponding plugin
entries.

GroupBy.nth is now, like pandas, a property returning a selector that
supports both the call form gb.nth(n, dropna=...) and the index form
gb.nth[n] with ints, list-likes of ints and non-negative-step slices.
The implementation is a positional-mask row filter over the grouped
offsets (same machinery as head/tail): it validates arguments with
pandas' exceptions, never mutates the grouped object (the old
implementation temporarily inserted a column into the user's frame and
crashed on SeriesGroupBy), honors the groupby's dropna for NaN keys,
and gathers the surviving rows from the pre-nans_to_nulls object so
values (NaN vs null), dtypes, the index, and the original row order are
those of the original rows.

In the cudf.pandas layer, pandas' nth is a class-level property (a
GroupByNthSelector), which the generic attribute machinery cannot wrap:
resolving gb.nth leaked the raw cudf attribute with no call-time
fallback, so cudf exceptions (e.g. for dropna) escaped instead of
falling back to pandas. Register a dispatching selector on both GroupBy
proxies that routes call and index forms through the fast-slow machinery.

Also reattach the timezone on aggregated tz-aware datetime columns
(libcudf returns tz-naive timestamps holding the same UTC instants) and
keep object dtype for string-producing aggregations on object-dtype
columns, both matching pandas.
@galipremsagar
galipremsagar requested a review from a team as a code owner July 14, 2026 12:16
@copy-pr-bot

copy-pr-bot Bot commented Jul 14, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions github-actions Bot added Python Affects Python cuDF API. cudf.pandas Issues specific to cudf.pandas labels Jul 14, 2026
@galipremsagar galipremsagar added bug Something isn't working non-breaking Non-breaking change labels Jul 14, 2026
@GPUtester GPUtester moved this to In Progress in cuDF Python Jul 14, 2026
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 25f24583-436e-44f5-ba0a-99073c9b697c

📥 Commits

Reviewing files that changed from the base of the PR and between 7ccdd9b and c5e4b9f.

📒 Files selected for processing (3)
  • python/cudf/cudf/core/groupby/groupby.py
  • python/cudf/cudf/pandas/_wrappers/pandas.py
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
💤 Files with no reviewable changes (1)
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • python/cudf/cudf/core/groupby/groupby.py

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added pandas-compatible grouped row selection with GroupBy.nth.
    • Supports callable selection such as grouped.nth(0) and index-style selection such as grouped.nth[0].
    • Supports integer, slice, and list-based selectors.
  • Bug Fixes

    • Improved preservation of string/object data types during grouped reductions.
    • Preserved timezone information for timezone-aware datetime results.
    • Maintained distinctions between missing-value representations during row selection.

Walkthrough

GroupBy gains pandas-style nth call and indexer selectors, preserves original NaN/null input distinctions, and updates aggregation dtype handling. Pandas proxies, tests, and compatibility mappings are updated for the new behavior.

Changes

GroupBy nth compatibility

Layer / File(s) Summary
Native nth selection
python/cudf/cudf/core/groupby/groupby.py
GroupBy.nth becomes a selector supporting calls and indexing, validates selectors, gathers from original input, and rejects dropna.
Aggregation dtype preservation
python/cudf/cudf/core/groupby/groupby.py
Aggregation results preserve object string outputs and restore timezone metadata for datetime results.
Pandas proxy integration
python/cudf/cudf/pandas/_wrappers/pandas.py
Pandas groupby proxies expose callable and indexer nth dispatch.
Compatibility validation updates
python/cudf/cudf/tests/groupby/test_nth.py, python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
Tests cover selector forms and invalid arguments, and obsolete failure mappings are removed.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: matt711, tomaugspurger, mroeschke

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: rewriting GroupBy.nth into a pandas-compatible positional row filter.
Description check ✅ Passed The description is directly related to the changeset and explains the GroupBy.nth rewrite, fallback behavior, and dtype fixes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
python/cudf/cudf/tests/groupby/test_nth.py (1)

63-96: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add empty/all-null-group edge cases to test_nth_selector_indexing.

The parametrized cases cover a single-element group and several slice/list forms, but there's no case for an empty DataFrame or a group whose key is entirely null (with the default dropna=True groupby behavior).

🧪 Suggested additional cases
 def test_nth_selector_indexing(arg):
     ...
     assert_groupby_results_equal(
         pdf.groupby("a").nth[arg],
         gdf.groupby("a").nth[arg],
     )
     if not isinstance(arg, slice):
         assert_groupby_results_equal(
             pdf.groupby("a").nth(arg),
             gdf.groupby("a").nth(arg),
         )
+
+
+def test_nth_selector_empty_and_all_null_groups():
+    pdf = pd.DataFrame({"a": [1, 1, None, None], "b": [10, 20, 30, 40]})
+    gdf = cudf.from_pandas(pdf)
+    assert_groupby_results_equal(
+        pdf.groupby("a").nth[0], gdf.groupby("a").nth[0]
+    )
+
+    empty_pdf = pdf.iloc[:0]
+    empty_gdf = gdf.iloc[:0]
+    assert_groupby_results_equal(
+        empty_pdf.groupby("a").nth[0], empty_gdf.groupby("a").nth[0]
+    )

As per path instructions, "Ensure test files provide comprehensive edge case coverage (empty, all-null, single-element, mixed types)."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/tests/groupby/test_nth.py` around lines 63 - 96, Add
empty-DataFrame and entirely null-group cases to test_nth_selector_indexing,
covering the existing indexed selector forms and preserving pandas/cuDF result
parity. Use the default dropna=True groupby behavior so null-key groups are
excluded, and retain the current single-element and slice/list coverage.

Source: Path instructions

python/cudf/cudf/core/groupby/groupby.py (1)

1796-1806: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Docstring for the new public nth property lacks Parameters/Returns sections.

Sibling public methods in this class (head, tail, sample, rank, etc.) document Parameters/Returns in numpydoc style. The nth docstring only prose-describes supported forms and omits the dropna parameter (which currently always raises NotImplementedError in native cuDF) and the return type.

📝 Suggested docstring expansion
     `@property`
     def nth(self) -> GroupByNthSelector:  # type: ignore[override]
         """
         Take the nth row from each group if n is an int, otherwise a
         subset of rows.
 
         Like pandas, supports both the call form ``gb.nth(n, dropna=...)``
         and the index form ``gb.nth[n]`` (with ints, list-likes of ints and
         non-negative-step slices).
+
+        Parameters
+        ----------
+        n : int, list-like of int, or slice
+            Position(s) to select within each group. Slices must have a
+            non-negative step.
+        dropna : {"any", "all", None}, default None
+            Not currently supported; raises ``NotImplementedError`` if set.
+
+        Returns
+        -------
+        Series or DataFrame
+            The selected rows, preserving original row order and index.
         """
         return GroupByNthSelector(self)

As per coding guidelines, "Ensure all public API methods have complete docstrings documenting parameters, return values, and behavior."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/core/groupby/groupby.py` around lines 1796 - 1806, Expand
the public GroupBy.nth property docstring for GroupByNthSelector to use
numpydoc-style Parameters and Returns sections. Document the supported n/index
forms, the dropna parameter and its current NotImplementedError behavior in
native cuDF, and the returned grouped selection type while preserving the
existing behavior description.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@python/cudf/cudf/core/groupby/groupby.py`:
- Around line 1796-1806: Expand the public GroupBy.nth property docstring for
GroupByNthSelector to use numpydoc-style Parameters and Returns sections.
Document the supported n/index forms, the dropna parameter and its current
NotImplementedError behavior in native cuDF, and the returned grouped selection
type while preserving the existing behavior description.

In `@python/cudf/cudf/tests/groupby/test_nth.py`:
- Around line 63-96: Add empty-DataFrame and entirely null-group cases to
test_nth_selector_indexing, covering the existing indexed selector forms and
preserving pandas/cuDF result parity. Use the default dropna=True groupby
behavior so null-key groups are excluded, and retain the current single-element
and slice/list coverage.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 29e0486e-b044-436c-9e0e-7071edee0849

📥 Commits

Reviewing files that changed from the base of the PR and between d9f8677 and aa081a7.

📒 Files selected for processing (5)
  • python/cudf/cudf/core/groupby/groupby.py
  • python/cudf/cudf/pandas/_wrappers/pandas.py
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
  • python/cudf/cudf/tests/groupby/test_nth.py
  • python/cudf/cudf/utils/dtypes.py
💤 Files with no reviewable changes (1)
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py

@galipremsagar

Copy link
Copy Markdown
Contributor Author

/okay to test d02fd94

…eference

* Move the object-vs-StringDtype preservation out of the global
  get_dtype_of_same_kind helper into GroupBy.agg's dtype branch: the
  helper's other callers (e.g. merge key coalescing) re-infer str for
  object inputs, and the global change regressed three
  TestMergeCategorical::test_dtype_on_merged_different params in CI.
  String-producing aggregations on object columns still stay object.
* Drop the nth property's return annotation: sphinx (warnings as
  errors) cannot resolve the GroupByNthSelector class reference that
  autodoc generates from it.
* Prune five plugin entries that strict-XPASSed in CI: the tz
  reattachment fixes test_groupby_agg_extension,
  test_agg_timezone_round_trip and test_pivot_tz_in_values, and the
  nth selector fixes test_groupby_with_single_column and
  test_indexing.py::test_multiindex (all verified passing in
  isolation).
@galipremsagar

Copy link
Copy Markdown
Contributor Author

/okay to test edff70b

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
python/cudf/cudf/core/groupby/groupby.py (4)

597-600: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Persist _obj_original during GroupBy serialization.

serialize() still persists self.obj (Line [2158]), which is the nans_to_nulls() result in pandas-compatible mode. After deserialization (Line [2182]), _nth can no longer restore the original NaN-versus-null values. Include the pre-conversion object in the serialized state and add a round-trip regression test.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/core/groupby/groupby.py` around lines 597 - 600, Update
GroupBy serialization and deserialization to persist and restore the
pre-conversion object stored in _obj_original, rather than retaining only
self.obj after nans_to_nulls(). Ensure _nth uses the restored original values so
NaN-versus-null distinctions survive round trips, and add a regression test
covering serialization followed by deserialization and nth.

1888-1898: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Honor GroupBy column selections in _nth.

_nth always gathers from self._obj_original and returns the full object. The class tracks selected columns through _selection (Line [610]), so calls such as df.groupby("key")["value"].nth(0) can return the entire original frame instead of the selected result. Route the gathered object through the existing selection-aware result construction.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/core/groupby/groupby.py` around lines 1888 - 1898, Update
the return path in _nth to apply the tracked _selection when constructing the
gathered result, using the existing selection-aware result construction instead
of returning self._obj_original.take(original_positions) directly. Preserve the
current original-row ordering and ensure selected-column calls such as grouped
Series selections return only the requested columns.

1840-1843: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reject zero-step slices. arg.step or 1 turns step=0 into 1, so gb.nth[::0] silently returns rows instead of raising. Handle step == 0 explicitly in both the slice validation and mask construction paths (python/cudf/cudf/core/groupby/groupby.py:1841-1843, 1865).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/core/groupby/groupby.py` around lines 1840 - 1843, Update
the slice handling in the groupby nth validation and mask-construction paths to
reject arg.step == 0 explicitly, alongside negative steps, raising the existing
ValueError instead of treating zero as the default step. Apply this consistently
near the validation block and the mask logic around the visible slice handling.

1831-1832: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Accept all supported list-like indexers. This branch only handles list, tuple, and np.ndarray, so other list-like inputs still raise TypeError before element validation. Use cudf.api.types.is_list_like here, while excluding scalars and strings.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudf/cudf/core/groupby/groupby.py` around lines 1831 - 1832, Update
the indexer normalization branch in the groupby logic to use
cudf.api.types.is_list_like, while explicitly excluding scalar values and
strings. Preserve converting accepted list-like inputs to args before element
validation, and ensure unsupported scalars or string inputs still follow the
TypeError path.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@python/cudf/cudf/core/groupby/groupby.py`:
- Around line 597-600: Update GroupBy serialization and deserialization to
persist and restore the pre-conversion object stored in _obj_original, rather
than retaining only self.obj after nans_to_nulls(). Ensure _nth uses the
restored original values so NaN-versus-null distinctions survive round trips,
and add a regression test covering serialization followed by deserialization and
nth.
- Around line 1888-1898: Update the return path in _nth to apply the tracked
_selection when constructing the gathered result, using the existing
selection-aware result construction instead of returning
self._obj_original.take(original_positions) directly. Preserve the current
original-row ordering and ensure selected-column calls such as grouped Series
selections return only the requested columns.
- Around line 1840-1843: Update the slice handling in the groupby nth validation
and mask-construction paths to reject arg.step == 0 explicitly, alongside
negative steps, raising the existing ValueError instead of treating zero as the
default step. Apply this consistently near the validation block and the mask
logic around the visible slice handling.
- Around line 1831-1832: Update the indexer normalization branch in the groupby
logic to use cudf.api.types.is_list_like, while explicitly excluding scalar
values and strings. Preserve converting accepted list-like inputs to args before
element validation, and ensure unsupported scalars or string inputs still follow
the TypeError path.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 29321660-d654-46c9-a395-e0bee99c727d

📥 Commits

Reviewing files that changed from the base of the PR and between aa081a7 and 7ccdd9b.

📒 Files selected for processing (2)
  • python/cudf/cudf/core/groupby/groupby.py
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
💤 Files with no reviewable changes (1)
  • python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py

# Conflicts:
#	python/cudf/cudf/pandas/scripts/pandas-testing-plugin.py
@galipremsagar

Copy link
Copy Markdown
Contributor Author

/okay to test b0caa07

@galipremsagar
galipremsagar requested a review from mroeschke July 15, 2026 20:41
rapids-bot Bot pushed a commit that referenced this pull request Jul 15, 2026
…rt=False (#23260)

Running pandas' own test suite under `cudf.pandas`, `tests/groupby/methods/test_size.py` had 6 failing tests. This PR fixes them (22/22 pass) and removes the corresponding xfail entries from the pandas-testing plugin. Two independent root causes:

### `SeriesGroupBy.size()` dtype for masked series

pandas returns `Int64` for `size()` on masked (`Int*`/`UInt*`/`Float*`/`boolean`) series (pandas GH#54132). Verified matrix on pandas 3.0.3:

| `.size()` on | result dtype |
|---|---|
| masked series (`Int64`, `Float64`, `boolean`, ...) | `Int64` |
| `string[pyarrow]` series | `Int64` |
| `ArrowDtype` series | `int64[pyarrow]` |
| `object` / `str` / `string[python]` series | `int64` |
| any `DataFrameGroupBy` | `int64` |

cuDF already special-cased the Arrow and `string[pyarrow]` rows; this adds the missing masked branch (Series-only, `StringDtype` excluded so `string[python]` stays `int64`).

### `GroupBy.apply` group order with `sort=False`

pandas processes groups in order of first appearance when `sort=False`. libcudf returns groups sorted by key, and `apply` consumed that layout directly, so results came out key-sorted. (`size()` was already correct — the failing tests compare `size()` against `apply(lambda a: a.shape[0])`, and the `apply` side was the broken one.)

The grouped layout (group names, offsets, grouped keys and values) is now permuted into first-appearance order before either engine runs — the same device-side first-position/argsort technique `GroupBy.__iter__` already uses — so every result shape (scalar-per-group, frame-per-group, transforms) sees pandas' iteration order.

### Validation

- pandas-tests `tests/groupby/methods/test_size.py`: 6 failed → 22/22 pass.
- pandas-tests `tests/groupby/test_apply.py` + the full `tests/groupby/methods/` directory: remaining failures are exactly the pre-existing known-failure entries (plus one pre-existing local-only `test_nth` failure that reproduces identically on `main` and is fixed by #23257).
- cuDF classic groupby suite passes; new classic regression tests pin both behaviors.

Authors:
  - GALI PREM SAGAR (https://github.com/galipremsagar)

Approvers:
  - Matthew Roeschke (https://github.com/mroeschke)

URL: #23260
Comment thread python/cudf/cudf/core/groupby/groupby.py Outdated
Comment thread python/cudf/cudf/core/groupby/groupby.py Outdated
Comment thread python/cudf/cudf/pandas/_wrappers/pandas.py Outdated
…_dtype_obj_string, numpydoc nth docstring

- Replace the hand-rolled _GroupByNthSelector dispatching stand-in with a
  registered intermediate proxy pair (cudf GroupByNthSelector / pandas
  GroupByNthSelector): the attribute machinery wraps gb.nth via the
  recorded getattr provenance and __call__/__getitem__ get the standard
  call-time fast/slow dispatch, including the dropna fallback.
- Use is_dtype_obj_string for the string-result check in agg dtype
  preservation so it also covers arrow string dtypes should
  dtype_from_pylibcudf_column ever produce them.
- Expand the GroupBy.nth docstring to numpydoc style with Parameters,
  Returns and doctested Examples.
@galipremsagar
galipremsagar requested a review from mroeschke July 15, 2026 20:57
@galipremsagar

Copy link
Copy Markdown
Contributor Author

/okay to test c5e4b9f

@galipremsagar

Copy link
Copy Markdown
Contributor Author

/merge

@galipremsagar galipremsagar added 5 - Ready to Merge Testing and reviews complete, ready to merge and removed 3 - Ready for Review Ready for review by team labels Jul 16, 2026
@rapids-bot
rapids-bot Bot merged commit 9e9c7d7 into NVIDIA:main Jul 16, 2026
126 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in cuDF Python Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

5 - Ready to Merge Testing and reviews complete, ready to merge bug Something isn't working cudf.pandas Issues specific to cudf.pandas non-breaking Non-breaking change Python Affects Python cuDF API.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants