如何在Python中创建二进制虚拟变量,当一个人的工资低于工资中位数时,该变量的值为0
,否则设置为1
?当薪水高于或低于以下时,我不明白该怎么做。
我试过这个
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 :(得分:2)
你可以通过将它乘以1来强制将布尔值强制转换为int:
df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 1
答案 1 :(得分:1)
您可以进行矢量化比较并将结果转换为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 if(condition)else Y),你需要apply
它,因为它们不能很好地与数组配合使用,而不是具有明确的真值。
答案 2 :(得分:0)
我认为你想要这样的东西(使用你的符号和变量名)。
df['Salary'] = 0 if df['Salary'] < df['Salary'].median() else 1
这与读取的完全一样。如果薪水低于中位数,则表示df['Salary']
为零,否则为1。作为参考,这种类型的语句称为三元运算符。
答案 3 :(得分:0)
这只是使用基本的条件并存储变量。
median = 30500
salary = 50000
median_flag = 1 if salary > median else 0
print median_flag
1