2016-04-15 25 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']將是零如果薪水低於中位數,否則將其作爲一個。作爲參考,這種類型的聲明被稱爲三元運算符

+0

非常感謝!但是當我按照你所說的那樣嘗試了一個錯誤時'ValueError:一個Series的真值是不明確的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。' – jul094

+0

那麼這是一個問題,無論'df ['薪水']'和'df ['薪水']。median()'是。不知道這些是什麼,我不能給你更具體的幫助,但它似乎'df ['Salary']'是一個值的數組,並且python不知道如何評估一系列Trues和False的有效性。你可能需要像列表理解那樣在你做'df ['Salary'] = [0如果薪水 zephyr

0

這只是使用基本的條件和存儲變量。

median = 30500 
salary = 50000 
median_flag = 1 if salary > median else 0 
print median_flag 
1 
0

你可以做一個量化的比較結果轉換爲int:

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

這工作,因爲我們有

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

爲了使三元接近工作(X,如果(條件)否則Y),你需要apply它,因爲它們不能很好地與陣列玩,它沒有明確的真值。

2

你可以僅僅通過一個乘以它強迫一個布爾爲int:

df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 1 
相關問題