-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
ENH: Add prod to masked_reductions #33442
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 8 commits
3e1f06c
a7eb301
48c1432
c73d7b9
a429ced
b0c95fc
c3e1763
6b66756
58f7bd0
a2574df
474506b
57551b8
1d25569
de5954a
2701fff
8321945
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -696,9 +696,18 @@ def _reduce(self, name: str, skipna: bool = True, **kwargs): | |
data = self._data | ||
mask = self._mask | ||
|
||
if name in {"sum", "min", "max"}: | ||
if name in {"sum", "prod", "min", "max"}: | ||
op = getattr(masked_reductions, name) | ||
return op(data, mask, skipna=skipna, **kwargs) | ||
result = op(data, mask, skipna=skipna, **kwargs) | ||
|
||
# if we have numeric op that would result in an int, | ||
# coerce to int if possible | ||
if name == "prod" and notna(result): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why did you need to add this back? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was getting a failure on some builds for \tests\arrays\boolean\test_reduction.py where we're checking that the product has int dtype so it might be needed:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm, then maybe the test needs to be edited. In any case, we should investigate why it is failing / what we should be expecting. From a quick test, it seems that numpy returns int64:
So I think we should follow that behaviour here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From what I can tell it was something that was only affecting Windows builds: https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=32986&view=logs&jobId=077026cf-93c0-54aa-45e0-9996ba75f6f7&j=077026cf-93c0-54aa-45e0-9996ba75f6f7&t=e95cf409-86ae-5b4d-6c5f-79395ef75e8f |
||
int_result = np.int64(result) | ||
if int_result == result: | ||
result = int_result | ||
|
||
return result | ||
|
||
# coerce to a nan-aware float if needed | ||
if self._hasna: | ||
|
@@ -710,12 +719,6 @@ def _reduce(self, name: str, skipna: bool = True, **kwargs): | |
if np.isnan(result): | ||
return libmissing.NA | ||
|
||
# if we have numeric op that would result in an int, coerce to int if possible | ||
if name == "prod" and notna(result): | ||
int_result = np.int64(result) | ||
if int_result == result: | ||
result = int_result | ||
|
||
return result | ||
|
||
def _maybe_mask_result(self, result, mask, other, op_name: str): | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you try using
maybe_cast_result_dtype
here (you will have to add the prod operation in side that)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as I understand, that should not be needed. Numpy should give the desired result for booleans.