繁体   English   中英

我如何在Python中创建一个虚拟变量,其条件低于或高于中值?

[英]How can I create a dummy variable in Python with a condition below or above median?

我如何在Python中创建二进制虚拟变量,当一个人的工资低于工资中位数,而该值设置为1时,该变量的值为0 当工资高于或低于工资时,我不知道如何做到。

我试过了

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

您可以通过将布尔值乘以一个整数来将其强制为整数:

df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 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,如果(条件),否则是Y)起作用,则需要apply它,因为它们不能很好地与没有明确的真值的数组一起使用。

我认为您想要这样的东西(使用您的符号和变量名)。

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

它的工作方式与读取的内容完全相同。 它说,如果薪水少于中位数,则df['Salary']将为零,否则将其设为1。 作为参考,这种类型的语句称为三元运算符

这只是使用基本条件并存储变量。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM