@@ -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