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

我想分别找到所有功能的欺诈率,然后用功能值替换这个值。例如,我的样本数据在下面,然后我想找到我的模型的欺诈率,如 STEP1,然后我想用模型的值替换,如 STEP2。

http://img.mukewang.com/62df9f9d00016ec705130162.jpg

我的代码在下面找到这个值,但它不起作用。错误代码也在下面。有人可以帮助我吗?


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):


炎炎设计
浏览 86回答 2
2回答

慕妹3146593

干得好:import pandas as pddf = 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 Agegrouped_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 Modelgrouped_df = df.groupby('Model', as_index=False).mean()merged_df = pd.merge(df, grouped_df, on=['Model'], how='inner')# some display correctionsdf = 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'] * 100df['Age'] = (df['Age'] * 100).round(0)输出:&nbsp; &nbsp;Model&nbsp; &nbsp;Age&nbsp; Fraud0&nbsp; 100.0&nbsp; 67.0&nbsp; &nbsp; &nbsp; 11&nbsp; 100.0&nbsp; 33.0&nbsp; &nbsp; &nbsp; 12&nbsp; &nbsp; 0.0&nbsp; 67.0&nbsp; &nbsp; &nbsp; 03&nbsp; &nbsp; 0.0&nbsp; 33.0&nbsp; &nbsp; &nbsp; 04&nbsp; &nbsp;50.0&nbsp; 67.0&nbsp; &nbsp; &nbsp; 15&nbsp; &nbsp;50.0&nbsp; 33.0&nbsp; &nbsp; &nbsp; 0

PIPIONE

我不确定我是否理解您的代码,但在这里我将如何做到这一点:for col in df.iloc[:, :-1]:&nbsp; &nbsp; group_df = df.groupby(col).mean()*100&nbsp; &nbsp; df[col] = df[col].map(group_df['Fraud'])结果&nbsp; &nbsp; Model&nbsp; &nbsp;Age&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Fraud0&nbsp; &nbsp;100.0&nbsp; &nbsp;66.666667&nbsp; &nbsp;11&nbsp; &nbsp;100.0&nbsp; &nbsp;33.333333&nbsp; &nbsp;12&nbsp; &nbsp;0.0&nbsp; &nbsp; &nbsp;66.666667&nbsp; &nbsp;03&nbsp; &nbsp;0.0&nbsp; &nbsp; &nbsp;33.333333&nbsp; &nbsp;04&nbsp; &nbsp;50.0&nbsp; &nbsp; 66.666667&nbsp; &nbsp;15&nbsp; &nbsp;50.0&nbsp; &nbsp; 33.333333&nbsp; &nbsp;0它假定欺诈 col 将是最后一个 col
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python