2016-07-27 8 views
3

Ich versuche, einen Staat Namen auf eine Liste von Universitäts-Namen zuweisen:ändern Wahr/Falsch-Wert zu diskretem Wert in Pandas Datenrahmen mit np.where()

df = pd.DataFrame({'College': pd.Series(['University of Michigan', 'University of Florida', 'Iowa State'])}) 
State = ['Michigan', 'Iowa'] 
df['State'] = np.where(df['College'].str.contains('|'.join(State)), 
    'state','--') 

Ich mag den „Staat ersetzen "Wert, der angezeigt wird, wenn eine Übereinstimmung mit dem tatsächlichen Namen des Status vorliegt. Beispiel: University of Michigan -> Michigan (statt "Staat"). Letztendlich wird "State" alle 50 Zustände haben, also kann ich nicht 50 "np.where" Anweisungen für jeden Staatsnamen schreiben.

Vielen Dank für Ihre Hilfe.

Antwort

3

könnten Sie str.extract hier verwenden, statt np.where:

In [290]: df['State'] = df['College'].str.extract('({})'.format('|'.join(State)), expand=True) 

In [291]: df 
Out[291]: 
        College  State 
0 University of Michigan Michigan 
1 University of Florida  NaN 
2    Iowa State  Iowa 
1
States = [ 
      'Washington' 'Wisconsin' 'West Virginia' 'Florida' 'Wyoming' 
      'New Hampshire' 'New Jersey' 'New Mexico' 'National' 'North Carolina' 
      'North Dakota' 'Nebraska' 'New York' 'Rhode Island' 'Nevada' 'Guam' 
      'Colorado' 'California' 'Georgia' 'Connecticut' 'Oklahoma' 'Ohio' 'Kansas' 
      'South Carolina' 'Kentucky' 'Oregon' 'South Dakota' 'Delaware' 
      'District of Columbia' 'Hawaii' 'Puerto Rico' 'Texas' 'Louisiana' 
      'Tennessee' 'Pennsylvania' 'Virginia' 'Virgin Islands' 'Alaska' 'Alabama' 
      'American Samoa' 'Arkansas' 'Vermont' 'Illinois' 'Indiana' 'Iowa' 
      'Arizona' 'Idaho' 'Maine' 'Maryland' 'Massachusetts' 'Utah' 'Missouri' 
      'Minnesota' 'Michigan' 'Montana' 'Northern Mariana Islands' 'Mississippi' 
] 

state_str = '|'.join(States) 
df.update(df.College.str.extract(r'(?P<State>{})'.format(state_str), expand=True)) 

df 

enter image description here