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

时间:2016-04-15 01:56:44

标签: python pandas dummy-variable

如何在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
...

4 个答案:

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