为了账号安全,请及时绑定邮箱和手机立即绑定

您正在尝试合并 object 和 float64 列。如果你想继续,你应该使用 pd.concat

您正在尝试合并 object 和 float64 列。如果你想继续,你应该使用 pd.concat

炎炎设计 2022-07-26 16:02:07
我想分别找到所有功能的欺诈率,然后用功能值替换这个值。例如,我的样本数据在下面,然后我想找到我的模型的欺诈率,如 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):
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

干得好:


import pandas as pd


df = pd.DataFrame({'Model': ['audi', 'audi', 'bmw', 'bmw', 'ford', 'ford'],'Age':[1,2,1,2,1,2] , 'Fraud': [1,1,0,0,1,0]})


# group df by Age

grouped_age = df.groupby('Age', as_index=False).mean()

merged_df = pd.merge(df, grouped_age, on=['Age'], how='inner')

df = merged_df.rename({'Age': 'x', 'Fraud_x': 'Fraud', 'Fraud_y':'Age'}, axis='columns')

df = df.drop('x', axis=1)


# group df by Model

grouped_df = df.groupby('Model', as_index=False).mean()

merged_df = pd.merge(df, grouped_df, on=['Model'], how='inner')

# some display corrections

df = merged_df.rename({'Model': 'x', 'Fraud_x': 'Fraud', 'Fraud_y':'Model', 'Age_x':'Age'}, axis='columns')

df = df.drop(['x', 'Age_y'], axis=1)

df = df[['Model', 'Age', 'Fraud']]

df['Model'] = df['Model'] * 100

df['Age'] = (df['Age'] * 100).round(0)

输出:


   Model   Age  Fraud

0  100.0  67.0      1

1  100.0  33.0      1

2    0.0  67.0      0

3    0.0  33.0      0

4   50.0  67.0      1

5   50.0  33.0      0


查看完整回答
反对 回复 2022-07-26
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我不确定我是否理解您的代码,但在这里我将如何做到这一点:


for col in df.iloc[:, :-1]:

    group_df = df.groupby(col).mean()*100

    df[col] = df[col].map(group_df['Fraud'])

结果


    Model   Age         Fraud

0   100.0   66.666667   1

1   100.0   33.333333   1

2   0.0     66.666667   0

3   0.0     33.333333   0

4   50.0    66.666667   1

5   50.0    33.333333   0

它假定欺诈 col 将是最后一个 col


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号