Skip to content

Commit 0974841

Browse files
committed
WIP: Improved approach, but all is broken
1 parent 00cbc23 commit 0974841

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

pandas/core/groupby.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,13 +1083,24 @@ def _try_cast(self, result, obj):
10831083
def _cython_agg_general(self, how, numeric_only=True):
10841084
output = {}
10851085
for name, obj in self._iterate_slices():
1086-
is_numeric = is_numeric_dtype(obj.dtype)
1087-
is_timdelta64 = is_timedelta64_dtype(obj.dtype)
1088-
if numeric_only and not (is_numeric or is_timdelta64):
1086+
if is_numeric_dtype(obj.dtype):
1087+
obj = com.ensure_float(obj)
1088+
is_numeric = True
1089+
out_dtype = 'f%d' % obj.dtype.itemsize
1090+
else:
1091+
is_numeric = issubclass(obj.dtype.type, (np.datetime64,
1092+
np.timedelta64))
1093+
out_dtype = 'float64'
1094+
if is_numeric:
1095+
values = obj.view('int64')
1096+
else:
1097+
values = obj.astype(object)
1098+
1099+
if numeric_only and not is_numeric:
10891100
continue
10901101

10911102
try:
1092-
result, names = self.grouper.aggregate(obj.values, how)
1103+
result, names = self.grouper.aggregate(values, how)
10931104
except AssertionError as e:
10941105
raise GroupByError(str(e))
10951106
output[name] = self._try_cast(result, obj)
@@ -2569,12 +2580,22 @@ def _cython_agg_blocks(self, how, numeric_only=True):
25692580

25702581
for block in data.blocks:
25712582
values = block._try_operate(block.values)
2572-
is_numeric = is_numeric_dtype(values.dtype)
2573-
is_timedelta64 = is_timedelta64_dtype(values.dtype)
25742583

2575-
if numeric_only and not (is_numeric or is_timedelta64):
2584+
if is_numeric_dtype(values.dtype):
2585+
values = com.ensure_float(values)
2586+
is_numeric = True
2587+
else:
2588+
is_numeric = issubclass(values.dtype.type, (np.datetime64,
2589+
np.timedelta64))
2590+
if is_numeric:
2591+
values = values.view('int64')
2592+
else:
2593+
values = values.astype(object)
2594+
2595+
if numeric_only and not is_numeric:
25762596
continue
25772597

2598+
# TODO DAN
25782599
if block.is_numeric:
25792600
values = _algos.ensure_float64(values)
25802601

0 commit comments

Comments
 (0)