2016-04-15 90 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