2017-12-20 4 views
1

Ich baue gerade einen gefälschten Datensatz zum Spielen mit. Ich habe einen Datensatz, genannt patient_data, die den Patienten Informationen hat:Hinzufügen neuer permanenter Spalte zum Datenrahmen python

patient_data = pd.DataFrame(np.random.randn(100,5),columns='id name dob sex state'.split()) 

Das gibt mir eine Probe von 100 Beobachtungen, mit Variablen wie Name, Geburtstag etc.

ist klar, das sind einige der (wie Name Geschlecht und Staat) sind kategorische Variablen, und es macht keinen Sinn, Zufallszahlen daran zu haben.

Also für "Sex" -Spalte, ich habe eine Funktion erstellt, die jede beliebige Zahl < 0 zu lesen "männlich" und alles andere, um "weiblich" zu lesen. Ich möchte eine neue Variable erstellen diese innerhalb dieser Variable „Geschlecht“ und speichern „gender“

def malefemale(x): 
if x < 0: 
    print('male') 
else: 
    print('female') 

Und dann schrieb ich einen Code, um diese Funktion in den Datenrahmen anzuwenden, um offiziell eine neue Variable zu erstellen

patient_data.assign(gender = patient_data['sex'].apply(malefemale)) 

Aber als ich „patient_data“ im jupiter Notebook-Typ, ich habe nicht den Datenrahmen sehen aktualisiert, um diese neue Variable enthalten. Es scheint, als wäre nichts getan worden.

Weiß jemand, was ich tun kann, um diese neue Geschlechtsvariable permanent in meinen patient_data-Datenrahmen einzufügen, wobei die Funktion richtig funktioniert?

Antwort

1

Ich glaube, Sie zuweisen müssen wieder und für neue Werte verwenden numpy.where:

patient_data = patient_data.assign(gender=np.where(patient_data['sex']<0, 'male', 'female')) 
print(patient_data.head(10)) 

     id  name  dob  sex  state gender 
0 0.588686 1.333191 2.559850 0.034903 0.232650 female 
1 1.606597 0.168722 0.275342 -0.630618 -1.394375 male 
2 0.912688 -1.273570 1.140656 -0.788166 0.265234 male 
3 -0.372272 1.174600 0.300846 1.959095 -1.083678 female 
4 0.413863 0.047342 0.279944 1.595921 0.585318 female 
5 -1.147525 0.533511 -0.415619 -0.473355 1.045857 male 
6 -0.602340 -0.379730 0.032407 0.946186 0.581590 female 
7 -0.234415 -0.272176 -1.160130 -0.759835 -0.654381 male 
8 -0.149291 1.986763 -0.675469 -0.295829 -2.052398 male 
9 0.600571 -1.577449 -0.906590 1.042335 -2.104928 female 
0

Sie benötigen eine benutzerdefinierte Funktion als

def malefemale(x): 
    if x < 0: 
    return "Male" 
    else: 
    return "female" 

dann einfach anwenden die benutzerdefinierte Funktion

patient_data['gender'] = patient_data['sex'].apply(malefemale) 
ändern
Verwandte Themen