Multiple lambda outputs in string replacement using apply [Python]

Question:

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.

Asked By: IngButters

||

Answers:

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
Answered By: constantstranger
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.