2016-04-15 2 views
0

Wie kann ich binäre Dummy-Variablen in Python erstellen, die den Wert 0 annehmen, wenn das Gehalt einer Person unter dem Median der Gehaltsstufe liegt und ansonsten auf 1 eingestellt ist? Ich verstehe nicht, wie man es macht, wenn Gehalt über oder unter.Wie kann ich eine Dummy-Variable in Python mit einer Bedingung unterhalb oder oberhalb des Medians erstellen?

ich versucht, dieses

df['Salary'] = (df['Salary'] > df['Salary'].median()) & (df['Salary'] < df['Salary'].median()) 

Aber es gibt keinen Ausgang.

Davor habe ich versucht, dies:

df['Salary'].median() 
df_Salary = pd.get_dummies(df['Salary'].median()) 
df_new = pd.concat([df, df_Salary], axis=1) 
df_new 

Und erhielt diese

Gender Exp Salary 74000.0 

0 Female 15 78200 1 
1 Female 12 66400 NaN 
2 Female 3 6000 NaN 
... 

Antwort

0

Ich glaube, Sie so etwas wie dies wollen (mit Ihrer Notation und Variablennamen).

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

Dies funktioniert genau so, wie es liest. Es sagt df['Salary'] wird Null sein, wenn das Gehalt weniger als der Median ist, sonst machen es eins. Als Referenz ist diese Art von Anweisung als ternärer Operator bekannt.

+0

Vielen Dank! Aber als ich versucht habe, wie Sie sagten, ist ein Fehler aufgetreten. ValueError: Der Wahrheitswert einer Serie ist mehrdeutig. Verwenden Sie a.empty, a.bool(), a.item(), a.any() oder a.all(). ' – jul094

+0

Nun, das ist ein Problem mit was auch immer 'df [' Gehalt '] 'und' df [' Gehalt ']. Median() 'ist. Ohne zu wissen, was das ist, kann ich Ihnen keine spezifischere Hilfe geben, aber es würde scheinen, 'df ['Gehalt'] 'ist ein Array von Werten und Python weiß nicht, wie man die Gültigkeit einer Reihe von Wahr und Falsch bewertet . Du brauchst vielleicht etwas wie Listenverstehen, wo du 'df ['Gehalt'] = [0 wenn Gehalt zephyr

0

Dies ist nur eine grundlegende Bedingung und das Speichern der Variablen.

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

Sie können einen vektorisierten Vergleich tun und das Ergebnis in einen int umwandeln:

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

Das funktioniert, weil wir

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

haben, um die ternären zu machen Ansätze funktionieren (X if (Bedingung) sonst Y), müssten Sie apply es, weil sie nicht gut mit Arrays, die keinen eindeutigen Wahrheitswert haben spielen.

2

Sie können einen boolean in einen int coerce nur um es durch eine Multiplikation:

df["Median_Compare"] = (df["Salary"] >= df["Salary"].median()) * 1 
Verwandte Themen