У меня есть такой кадр данных:
serie = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
values = [2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2]
series_X_values = {'series': serie, 'values': values}
df_mytest = pd.DataFrame.from_dict(series_X_values)
df_mytest
Мне нужно создать третий столбец (например, чаще)
df_mytest['most_frequent'] = np.nan
, значения которого будут наиболее часто наблюдаемыми встолбец 'values', сгруппированный по 'series', или замените значения в столбце 'values' на самый частый термин, как показано в приведенном ниже кадре данных:
serie = [1, 2, 3]
values = [2, 2, 1]
series_X_values = {'series': serie, 'values': values}
df_mytest = pd.DataFrame.from_dict(series_X_values)
df_mytest
Я пробовал некоторые неудачные варианты, такие как:
def personal_most_frequent(col_name):
from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy="most_frequent")
return imp
df_result = df_mytest.groupby('series').apply(personal_most_frequent('values'))
но ...
TypeError Traceback (последний последний вызов) /usr/local/lib/python3.6/dist-packages/pandas/core/groupby/groupby.py в apply (self, func, * args, ** kwargs) 688 try: -> 689 result = self._python_apply_general (f) 690 за исключением исключения:
5 кадров / usr / local / lib/python3.6/dist-packages/pandas/core/groupby/groupby.py в _python_apply_general (self, f) 706 ключей, значений, mutated = self.grouper.apply (f, self._selected_obj, -> 707 self.ось) 708
/ usr / local / lib / python3.6 / dist-packages / pandas / core / groupby / ops.py в применении (self, f, data, axis) 189 group_axes = _get_axes (group) -> 190 res = f (group) 191, если не _is_indexed_like (res, group_axes):
TypeError: объект 'SimpleImputer' не вызывается
Во время обработкииз вышеупомянутого исключения произошло другое исключение:
TypeError Traceback (последний последний вызов) в () 5 return imp 6 ----> 7 df_result = df_mytest.groupby ('series'). apply (personal_most_frequent('values'))
/ usr / local / lib / python3.6 / dist-packages / pandas / core / groupby / groupby.py в применении (self, func, * args, ** kwargs)699 700 с _group_selection_context (self): -> 701 вернуть self._python_apply_general (f) 702 703 вернуть результат
/ usr / local / lib / python3.6 / dist-packages / pandas / core / groupby /groupby.py в _python_apply_general (self, f) 705 def _python_apply_general (self, f): 706 ключей, значений, mutated = self.grouper.apply (f, self._selected_obj, -> 707 self.axis) 708 709 возвращают self._wrap_applied_output (
/ usr / local / lib / python3.6 / dist-packages / pandas / core / groupby / ops.py в apply (self, f, data, axis) 188 # группа может быть изменена 189 group_axes = _get_axes (group) -> 190 res = f (group) 191, если не _is_indexed_like (res, group_axes): 192 mutated =True
TypeError: объект 'SimpleImputer' не вызывается
и ...
df_mytest.groupby(['series', 'values']).agg(lambda x:x.value_counts().index[0])
, но снова ...
IndexError Traceback (последний вызов был последним) /usr/local/lib/python3.6/dist-packages/pandas/core/groupby/ops.py в agg_series (self, obj, func) 589 try: -> 590вернуть self._aggregate_series_fast (obj, func) 591, за исключением исключения:
12 кадровextension.pyx в pandas._libs.reduction.SeriesGrouper.get_result ()
IndexError: индекс 0 выходит за границы оси 0 с размером 0
Во время обработки вышеуказанного исключения другое исключениепроизошло:
IndexError Traceback (последний вызов был последним) /usr/local/lib/python3.6/dist-packages/pandas / core / indexes / base.py в getitem (self, key) 3956, если is_scalar (key): 3957 key = com.cast_scalar_indexer (key)-> 3958 вернуть getitem (ключ) 3959 3960, если isinstance (ключ, срез):
IndexError: индекс 0 выходит за пределы оси 0 с размером 0
Я прошупомощь сообщества для завершения этого процесса.