1

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

4 回答 4

2

您可以通过将布尔值乘以一来强制将布尔值转换为 int:

df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 1
于 2016-04-15T03:32:14.200 回答
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要这样做,因为它们不能很好地处理没有明确真值的数组。

于 2016-04-15T02:33:40.733 回答
0

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

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

这和它读起来的完全一样。它说df['Salary']如果工资低于中位数,则为零,否则为一。作为参考,这种类型的语句称为三元运算符

于 2016-04-15T02:06:55.917 回答
0

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

median = 30500
salary = 50000
median_flag = 1 if salary > median else 0
print median_flag
1
于 2016-04-15T02:08:45.357 回答