How to speed up this Regular Expression in .Replace function?
I don't understand what caused the problem but I solved it.
The only thing I changed is in step 2. I used apply/lambda function and it suddenly works and I have no idea why.

Take the ID and replace "ELI-" with "@", save as ID2:

df["ID2"] = df["ID"].str.replace("ELI-", "@")

Find ID2 in the string of bk_name and replace it with "":

df["new_name"] = df[["bk_name", "ID2"]].astype(str).apply(lambda x: x["bk_name"].replace(x["ID2"], ""), axis=1)

Take the ID again, replace "ELI-" with "#", add it at the end of the string of new_name:

df["new_name"] = df["new_name"] + df["ID"].str.replace("ELI-", "#")
I have 4.5 million rows to process, so I need to speed this up so bad. 
I don't understand how regex works pretty well, so other answers are so hard for me to understand.
I have a column that contains IDs, e.g.:

ELI-123456789

This numeric part of this ID is contained in this string in a columnm bk_name started with a "@":

AAAAA@123456789_BBBBB;CCCCC;

Now my goal is to change that string into this string, throw the ID at the end, started with a "#", save it in new_name:

AAAAA_BBBBB;CCCCC;#123456789

Here's what I tried:

Take the ID and replace "ELI-" with "@", save as ID2:

df["ID2"] = df["ID"].str.replace("ELI-", "@")

Find ID2 in the string of bk_name and replace it with "":

df["new_name"] = df["bk_name"].replace(regex = r'(?i)' + df["ID2"].astype(str), value = "")

Take the ID again, replace "ELI-" with "#", add it at the end of the string of new_name:

df["new_name"] = df["new_name"] + df["ID"].str.replace("ELI-", "#") 
Now the problem is that step 2 is the line that takes most of the time, it took 6.5 second to process 6700 rows.
But now I have 4.6 millions rows to process, it's been 7 hours and it's still running and I have no idea why.
In my opinions, regex slows down my code. But I have no deeper understanding.
So thanks for your help in advance, any suggestions would be appreciated :)