idxmax and idxmin do not work with strings · Issue #6287 · pandas-dev/pandas (original) (raw)
In [8]: pandas.DataFrame({'A':["A","B","C", "A"], 'B':list("ABCD")}).groupby("A").B.idxmax()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-6aa5f42cc358> in <module>()
----> 1 pandas.DataFrame({'A':["A","B","C", "A"], 'B':list("ABCD")}).groupby("A").B.idxmax()
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in wrapper(*args, **kwargs)
341 return self.apply(curried_with_axis)
342 except Exception:
--> 343 return self.apply(curried)
344
345 return wrapper
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in apply(self, func, *args, **kwargs)
422 return func(g, *args, **kwargs)
423
--> 424 return self._python_apply_general(f)
425
426 def _python_apply_general(self, f):
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in _python_apply_general(self, f)
425
426 def _python_apply_general(self, f):
--> 427 keys, values, mutated = self.grouper.apply(f, self.obj, self.axis)
428
429 return self._wrap_applied_output(keys, values,
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in apply(self, f, data, axis)
881 # group might be modified
882 group_axes = _get_axes(group)
--> 883 res = f(group)
884 if not _is_indexed_like(res, group_axes):
885 mutated = True
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in f(g)
420 @wraps(func)
421 def f(g):
--> 422 return func(g, *args, **kwargs)
423
424 return self._python_apply_general(f)
/home/apprun/gitrepos/pandas/pandas/core/groupby.py in curried(x)
327
328 def curried(x):
--> 329 return f(x, *args, **kwargs)
330
331 # preserve the name so we can detect it when calling plot methods,
/home/apprun/gitrepos/pandas/pandas/core/series.py in idxmax(self, axis, out, skipna)
1284 DataFrame.idxmax
1285 """
-> 1286 i = nanops.nanargmax(_values_from_object(self), skipna=skipna)
1287 if i == -1:
1288 return pa.NA
/home/apprun/gitrepos/pandas/pandas/core/nanops.py in nanargmax(values, axis, skipna)
387 """
388 values, mask, dtype = _get_values(values, skipna, fill_value_typ='-inf',
--> 389 isfinite=True)
390 result = values.argmax(axis)
391 result = _maybe_arg_null_out(result, axis, mask, skipna)
/home/apprun/gitrepos/pandas/pandas/core/nanops.py in _get_values(values, skipna, fill_value, fill_value_typ, isfinite, copy)
139 values = _values_from_object(values)
140 if isfinite:
--> 141 mask = _isfinite(values)
142 else:
143 mask = isnull(values)
/home/apprun/gitrepos/pandas/pandas/core/nanops.py in _isfinite(values)
173 return isnull(values)
174 elif isinstance(values.dtype, object):
--> 175 return -np.isfinite(values.astype('float64'))
176
177 return -np.isfinite(values)
ValueError: could not convert string to float: D
In [9]: pandas.DataFrame({'A':["A","B","C", "A"], 'B':list("ABCD")}).groupby("A").B.max()
Out[9]:
A
A D
B B
C C
Name: B, dtype: object