Skip to content

Commit cdacc3f

Browse files
committed
Backport PR pandas-dev#29173 for 0.25.3 release
1 parent 31260be commit cdacc3f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

pandas/_libs/groupby.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,9 @@ def group_quantile(ndarray[float64_t] out,
741741
with nogil:
742742
for i in range(N):
743743
lab = labels[i]
744+
if lab == -1: # NA group label
745+
continue
746+
744747
counts[lab] += 1
745748
if not mask[i]:
746749
non_na_counts[lab] += 1

pandas/tests/groupby/test_function.py

+23
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,29 @@ def test_quantile_out_of_bounds_q_raises():
13271327
g.quantile(-1)
13281328

13291329

1330+
def test_quantile_missing_group_values_no_segfaults():
1331+
# GH 28662
1332+
data = np.array([1.0, np.nan, 1.0])
1333+
df = pd.DataFrame(dict(key=data, val=range(3)))
1334+
1335+
# Random segfaults; would have been guaranteed in loop
1336+
grp = df.groupby("key")
1337+
for _ in range(100):
1338+
grp.quantile()
1339+
1340+
1341+
def test_quantile_missing_group_values_correct_results():
1342+
# GH 28662
1343+
data = np.array([1.0, np.nan, 3.0, np.nan])
1344+
df = pd.DataFrame(dict(key=data, val=range(4)))
1345+
1346+
result = df.groupby("key").quantile()
1347+
expected = pd.DataFrame(
1348+
[1.0, 3.0], index=pd.Index([1.0, 3.0], name="key"), columns=["val"]
1349+
)
1350+
tm.assert_frame_equal(result, expected)
1351+
1352+
13301353
# pipe
13311354
# --------------------------------
13321355

0 commit comments

Comments
 (0)