-2

Here is image

I need to select multiple strings that ends with ['edit'] make new column name 'state' from this dataframe.

Nicolas Gervais
  • 33,817
  • 13
  • 115
  • 143
  • 1
    Please provide a [reproducible pandas example](https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples). – BioGeek Feb 24 '20 at 00:24
  • What is the issue, exactly? Have you tried anything, done any research? Stack Overflow is not a free code writing service. See: [tour], [ask], [help/on-topic], https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users. – AMC Feb 24 '20 at 01:18

2 Answers2

0

This should work:

df['state'] = df.loc[df['YourCol'].str.endswith('[edit]'), 'YourCol']

Just replace YourCol with the column you're working with, and df with the name of your dataframe. Note that where it doesn't end with [edit], you will get NaN values.

Nicolas Gervais
  • 33,817
  • 13
  • 115
  • 143
0

I think you're trying to use the "[edit]" rows not just as a separate column, instead map them to the schools below them, so that you'd end up with something like this:

School                                           State

Fairbanks (University of Alaska Fairbanks)[2]    Alaska
Flagstaff (Northern Arizona University)          Arizona
Tempe (Arizona State University)                 Arizona
Tucson (University of Arizona)                   Arizona
Arkadelphia (Henderson State University, ...)    Arkansas

If that's the case, you can use a combination of Nicolas Gervais's answer with pandas' fillna:

df['State'] = df[df['YourCol'].str.endswith('[edit]')]['YourCol']
df['State'] = df['State'].fillna(method='ffill') # Forward-fills the states
df = df.drop(df[df['YourCol'].str.endswith('[edit]')]) # Drop the "header" rows
df['State'] = df['State'].str.slice_replace(start=-6) # Remove "[edit]" from the end of the state names
Adam Kern
  • 566
  • 4
  • 14