pandas根据条件替换另一列的内容

时间:2017-09-04 13:10:15

标签: python-3.x pandas

我有一个pandas数据框。一列有字符串变量,另一列有1&0; s和0' s。根据针对字符串列的每个值发生的1的百分位阈值,我想用1或0替换该值。

'train_data'数据框的两列是"问题"和"客户有争议?"

问题

结算声明

付款/收款,汇款

有关信用报告的错误信息

结算声明

交易问题

贷款修改,收款,取消抵押品赎回权

贷款服务,付款,托管帐户

贷款修改,收款,取消抵押品赎回权

信用卡保护/债务保护

消费者有争议吗? 没有 没有 没有 没有 没有 没有 没有 是 否

我的代码:

b = pd.crosstab(train_data['Issue'], train_data['Consumer disputed?']).apply(lambda r: r/r.sum(), axis=1)

b['Issue_max'] = np.where(b[1]>=0.2, 1, 0)

train_data = train_data.merge(b, on='Issue', how='left')

然后删除在train_data中合并的不需要的b列

for x in [1,0, 'Issue']:
    del train_data[x]

现在代码看起来非常混乱。有没有人有更简单的代码?

1 个答案:

答案 0 :(得分:0)

您可以使用transform来避免合并操作(以及不需要的列):

train_data['Issue_max'] = train_data.groupby('Issue')['Consumer disputed?'] \
                                    .transform(lambda g: (g.sum() / len(g)) >= 0.2) \
                                    .astype(int)
最后

.astype(int)是将布尔值转换为10的简便方法。