2016-11-27 5 views
2

内の1つの値私はすべての観測がデフォルトまたは全額払込済のどちらかになるように、融資状況に関するデータを再コード化しようとしています。具体的には、私は誰かをコード化したいです!= '完全に支払われました'を 'デフォルト'とします。ここでRecodeのすべてが、パンダのデータフレームの列

は私の値は次のとおりです。

df.loan_status.unique() 

array(['Fully Paid', 'Charged Off', 'Default', 'Late (31-120 days)', 
    'In Grace Period', 'Late (16-30 days)', 
    'Does not meet the credit policy. Status:Fully Paid', 
    'Does not meet the credit policy. Status:Charged Off', 'Issued'], dtype=object) 

私は、次のコードを試みたが、すべての観測は「デフォルト」として記録ました:

statuses= df['loan_status'].unique() 
for status in statuses: 
    if status!='Fully Paid': 
     df['loan_status']='Default' 

これを行う方法上の任意のアドバイスをいただければ幸いです!

+1

あなたがテストするものに対応する要素を設定されていません。あなたは 'DF [DF [「loan_status」]!=「完全有料」] = 'Default''、以下MaxUの提案(私はパンダに慣れ密接にいないよ)のようなものを必要としています。 –

+2

@AndrasDeakは、私は、これは少しより堅牢なことだと思う: 'df.loc [!] 'loan_status' [DF = '全額払込済'、 'loan_status'] = 'Default'' – MaxU

+1

@MaxUああ、間違いなく、私が唯一です接線方向にパンダに精通しています。したがって、「何かのような」;)ありがとう。 –

答えて

1

私は、このアプローチが好きです。

アンドラーシュディーク/ MaxU。オプション1

df.loc[df.loan_status.ne('Fully Paid'), 'loan_status'] = 'Default' 

オプション2
pd.Series.where

ls = df.loan_status 
df.update(ls.where(ls.eq('Fully Paid'), 'Default')) 

オプション3

pd.Series.mask
ls = df.loan_status 
df.update(ls.mask(ls.ne('Fully Paid')).fillna('Default')) 

オプション4
numpy.where

ls = df.loan_status.values 
paid, dflt = 'Fully Paid', 'Default' 
df.loc[:, 'loan_status'] = np.where(ls == paid, paid, dflt) 
関連する問題