Skip to content
Advertisement

Multiple lambda outputs in string replacement using apply [Python]

I have a list of “states” from which I have to iterate:

states = ['antioquia', 'boyaca', 'cordoba', 'choco']

I have to iterate one column in a pandas df to replace or cut the string where the state text is found, so I try:

df_copy['joined'].apply([(lambda x:  x.replace(x,x[:-len(j)])  if x.endswith(j) and len(j) != 0 else x) for j in states])

And the result is:

Result obtained

Result wanted:

Result wanted

joined column is the input and the desired output is p_joined column

If it’s possible also to find the state not only in the end of the string but check if the string contains it and replace it

Thanks in advance for your help.

Advertisement

Answer

This will do what your question asks:

df_copy['p_joined'] = df_copy.joined.str.replace('(' + '|'.join(states) + ')$', '')

Output:

                             joined                 p_joined
0                   caldasantioquia                   caldas
1                  santafeantioquia                  santafe
2  medelinantioquiamedelinantioquia  medelinantioquiamedelin
3                  yarumalantioquia                  yarumal
4  medelinantioquiamedelinantioquia  medelinantioquiamedelin
Advertisement