2017-08-24 5 views
0

Ich spiele etwa mit Python und Pandas.Füllen Sie neue Spalte basierend auf Bedingungen in einer anderen Spalte

ich einen Datenrahmen geschaffen habe, habe ich eine Spalte (Achse 1) genannt ‚Kreis‘ aber ich brauche eine Spalte zu erstellen namens ‚Region‘ und es so füllen (atleast glaube ich):

If County column == 'Suffolk' or 'Norfolk' or 'Essex' then in Region column insert 'East Anglia' 

If County column == 'Kent' or 'East Sussex' or 'West Sussex' then in Region Column insert 'South East' 

If County column == 'Dorset' or 'Devon' or 'Cornwall' then in Region Column insert 'South West' 

und so weiter ...

Bisher habe ich dies:

myDataFrame['Region'] = np.where(myDataFrame['County']=='Suffolk', 'East Anglia', '') 

Aber ich vermute, dies nicht für andere Landkreise arbeiten

Wie ich sicher bin, ist ich offensichtlich ein Anfänger. Ich habe versucht zu googeln und zu lesen, konnte aber nur über Numpy herausfinden wo, was mich soweit gebracht hat.

Antwort

1

Sie müssen auf jeden Fall df.isin und loc basierte Indexierung:

df['Region'] = np.nan 
df.loc[df.County.isin(['Suffolk','Norfolk', 'Essex']), 'Region'] = 'East Anglia' 
df.loc[df.County.isin(['Kent', 'East Sussex', 'West Sussex']), 'Region'] = 'South East' 
df.loc[df.County.isin(['Dorset', 'Devon', 'Cornwall']), 'Region'] = 'South West' 

Sie auch eine Zuordnung der Sorten schaffen könnte und verwenden df.map oder df.replace:

mapping = { 'Suffolk' : 'East Anglia', 'Norfolk': 'East Anglia', ... 'Kent' :'South East', ..., ... } 
df['Region'] = df.County.map(mapping) 

Ich würde ein bevorzugen map hier, weil es Nicht-Übereinstimmungen zu NaN konvertieren würde, was die ideale Sache wäre.

+0

Vielen Dank für die Antwort so schnell, ich schätze es wirklich. Ich google was "loc" ist, lerne ich für die Zukunft. – Dee1983

+0

@ Dee1983 Eine zweite Lösung hinzugefügt. 'loc'-basierte Indizierung ist eine sichere Slice-Indizierung mit' df.loc'. –

+0

oder vielleicht 'ersetzen' ~ – Wen

Verwandte Themen