2016-04-15 2 views
0

Pythonでバイナリダミー変数を作成するには、人の給与が平均給与水準を下回っている場合に0の値をとり、それ以外の場合は1に設定しますか?私は給料が上または下のときにそれを作る方法を理解していません。Pythonでダミー変数を作成するにはどうすればいいですか?

私はこの

df['Salary'] = (df['Salary'] > df['Salary'].median()) & (df['Salary'] < df['Salary'].median()) 

を試みたが、出力はありません。その前に

私はこの試みた:

df['Salary'].median() 
df_Salary = pd.get_dummies(df['Salary'].median()) 
df_new = pd.concat([df, df_Salary], axis=1) 
df_new 

をそして、私はあなたがこの(あなたの表記と変数名を使用して)のような何かをしたいと思います。この

Gender Exp Salary 74000.0 

0 Female 15 78200 1 
1 Female 12 66400 NaN 
2 Female 3 6000 NaN 
... 

答えて

0

を得ました。

df['Salary'] = 0 if df['Salary'] < df['Salary'].median() else 1 

これはまるで読むように機能します。給料が中央値よりも小さい場合はdf['Salary']はゼロになり、そうでない場合は1になります。参考までに、このタイプのステートメントは、三元演算子として知られています。

+0

おかげでたくさん!しかし、私があなたがエラーが発生したと言ったようにしてみました。 'ValueError:Seriesの真理値はあいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all() 'を使用します。 – jul094

+0

それでは、それは 'df ['Salary']'と 'df ['Salary']の問題で、median()は問題です。それらが何であるかわからなければ、私はあなたにもっと具体的な助けを与えることはできませんが、df ['Salary'] 'は値の配列であり、PythonはTrueとFalsesの配列の妥当性を評価する方法を知らない。あなたはdf ['Salary'] = [0 salary zephyr

0

これは基本的な条件付きで変数を格納するだけです。

あなたはベクトル化の比較を行うと、intに結果を変換することができ
median = 30500 
salary = 50000 
median_flag = 1 if salary > median else 0 
print median_flag 
1 
0

>>> df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()).astype(int) 
>>> df 
    Gender Exp Salary Median_Compare 
0 Female 15 78200    1 
1 Female 12 66400    0 
2 Female 3 6000    0 

我々は三元は、(Xの場合(仕事に近づくようにするに

>>> df["Salary"].median() 
66400.0 
>>> df["Salary"] >= df["Salary"].median() 
0  True 
1 False 
2 False 
Name: Salary, dtype: bool 
>>> (df["Salary"] >= df["Salary"].median()).astype(int) 
0 1 
1 0 
2 0 
Name: Salary, dtype: int32 

を持っているので、これは動作します条件)それ以外の場合は)applyが必要です。なぜなら、明白な真理値を持たない配列ではうまく動作しないからです。

2

あなただけの1を乗じてintにブール値を強制することができます

df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 1 
関連する問題