2017-07-16 18 views
0

私は郵便番号と所得を持つデータフレームを持っています。所得の一部は= 0ですが、これは間違っています。パンダDictを使用して変数値に '0'を置き換えます

私は、各郵便番号がその郵便番号内のすべての収入の平均所得にマップされた辞書を持っています。

データフレーム内のすべての所得を= 0に置き換えたいのですが、その平均収入額はそれぞれの郵便番号です。

私はこれを試してみました:無駄に

income = [] 
for row in df['income']: 
    if row == 0: 
     income.replace({0:{income_zip}}, inplace = True) 
    else: 
     income.append(row) 

。私はすべての0を同じ値で置き換えるために多くのリソースを見つけましたが、行の別の値に基づくdictの変数値で0を置き換える方法は不明です。

答えて

0

あなたはこれを言っていますか?

income = [] 
for row in df['income']: 
    if row == 0: 
     df['income'].replace({0:{income_zip}}, inplace = True) 
    else: 
     income.append(row) 
+0

はいを​​!これはうまくいった。ありがとうございました! – bstrain

+0

@bstrainデータフレーム値を反復処理することはめったに効率的ではありません。 –

+0

はい、私は知っています。私は約17k行しか扱っておらず、スピードを上げていません。私は一般的にはPythonにはあまり新しく、このようなことをやり遂げることに頭を抱えています。私がそれに来るとき、私は最適化橋を渡ります。 – bstrain

1

また、あなたの変換関数を定義し、軸に沿って、あなたのデータフレーム上の1(行)applyを使用することができます。

def transform(row): 
    d = {'zip_code_1': 'mean_income_1', 'zip_code_2': 'mean_income_2'} 
    row['income'] = d[row['zip_code']] if row['income'] == 0 else row['income'] 
    return row 

df = df.apply(transform, axis=1) 
0

またはこのワンライナー:

df['income'] = map(lambda x, y : y if y != 0 else income_zip[x], *[df['zip_codes'], df['income']]) 
関連する問題