Я хочу найти частоту FRAUD для всех функций в отдельности, а затем заменить эти значения значением функции. Например, мой пример данных приведен ниже, затем я хочу найти коэффициент мошенничества моей модели, например STEP1, затем я хочу заменить его значением модели, например STEP2.
Мой код ниже, чтобы найти эти значения, но он не работает. Код ошибки также ниже. Может ли кто-нибудь мне помочь?
for i in df2_a.columns:
grp1 = df2.groupby(i, as_index=False, sort=True, group_keys=True)[['EXT_REFERENCE']].count()
df3 = df2[df2.FRAUD == 0]
grp2 = df3.groupby(i, as_index=False, sort=True, group_keys=True)[['EXT_REFERENCE']].count()
df4 = df2[df2.FRAUD == 1]
grp3 = df4.groupby(i, as_index=False, sort=True, group_keys=True)[['EXT_REFERENCE']].count()
grp4 = grp1.merge(grp2, how = 'left', on=i )
grp5 = grp4.merge(grp3, how = 'left', on=i )
grp6 = grp5.fillna(0)
grp6[i+'_New'] = grp5.EXT_REFERENCE / grp5.EXT_REFERENCE_x
grp7 = grp6.fillna(0)
grp8 = grp7.drop(['EXT_REFERENCE','EXT_REFERENCE_x','EXT_REFERENCE_y'],axis=1)
df5 = pd.merge(df2_a, grp8, on=i, how='left')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-39-225543878353> in <module>
6 grp3 = df4.groupby(i, as_index=False, sort=True, group_keys=True)[['EXT_REFERENCE']].count()
7 grp4 = grp1.merge(grp2, how = 'left', on=i )
----> 8 grp5 = grp4.merge(grp3, how = 'left', on=i )
9 grp6 = grp5.fillna(0)
10 grp6[i+'_New'] = grp5.EXT_REFERENCE / grp5.EXT_REFERENCE_x
/opt/anaconda/envs/env_python/lib/python3.6/site-packages/pandas/core/frame.py in merge(self, right,
how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
6866 right_on=right_on, left_index=left_index,
6867 right_index=right_index, sort=sort, suffixes=suffixes,
-> 6868 copy=copy, indicator=indicator, validate=validate)
6869
6870 def round(self, decimals=0, *args, **kwargs):
/opt/anaconda/envs/env_python/lib/python3.6/site-packages/pandas/core/reshape/merge.py in merge(left,
right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator,
validate)
45 right_index=right_index, sort=sort, suffixes=suffixes,
46 copy=copy, indicator=indicator,
---> 47 validate=validate)
48 return op.get_result()
49
/opt/anaconda/envs/env_python/lib/python3.6/site-packages/pandas/core/reshape/merge.py in
__init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort,
suffixes, copy, indicator, validate)
531 # validate the merge keys dtypes. We may need to coerce
532 # to avoid incompat dtypes
--> 533 self._maybe_coerce_merge_keys()
534
535 # If argument passed to validate,
/opt/anaconda/envs/env_python/lib/python3.6/site-packages/pandas/core/reshape/merge.py in
_maybe_coerce_merge_keys(self)
978 (inferred_right in string_types and
979 inferred_left not in string_types)):
--> 980 raise ValueError(msg)
981
982 # datetimelikes must match exactly
ValueError: You are trying to merge on object and float64 columns. If you wish to proceed you should
use pd.concat
РЕДАКТИРОВАТЬ
Спасибо за ваши комментарии, ребята, но мне интересно, что мой образец имеет только 1 особенность, потому что это пример. Но в моих данных катушки у меня есть 120 функций. Поэтому я пытаюсь с «для l oop» в моем коде для расчета для всех столбцов. Можете ли вы проверить пример ниже и не думайте, что только 2 функции (модель, возраст). Подумайте о 120 характеристиках для того же расчета.