Q:

Pandas dataframe column value case insensitive replace where 

Is there a case insensitive version for pandas.DataFrame.replace? https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.replace.html
I need to replace string values in a column subject to a case-insensitive condition of the form "where label == a or label == b or label == c".

A:

The issue with some of the other answers is that they don't work with all Dataframes, only with Series, or Dataframes that can be implicitly converted to a Series. I understand this is because the .str construct exists in the Series class, but not in the Dataframe class. 
To work with Dataframes, you can make your regular expression case insensitive with the (?i) extension. I don't believe this is available in all flavors of RegEx but it works with Pandas.
d = {'a':['test', 'Test', 'cat'], 'b':['CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)

    a       b
0   test    CAT
1   Test    dog
2   cat     Cat

Then use replace as you normally would but with the (?i) extension:
df.replace('(?i)cat', 'MONKEY', regex=True)

    a       b
0   test    MONKEY
1   Test    dog
2   MONKEY  MONKEY

A:

I think need convert to lower and then replace by condition with isin:
d = {'a':['test', 'Test', 'cat', 'CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)

m = df['a'].str.lower().isin(['cat','test'])
df.loc[m, 'a'] = 'baby' 
print (df)
      a
0  baby
1  baby
2  baby
3  baby
4   dog
5  baby

Another solution:
df['b'] = df['a'].str.replace('test', 'baby', flags=re.I)
print (df)
      a     b
0  test  baby
1  Test  baby
2   cat   cat
3   CAT   CAT
4   dog   dog
5   Cat   Cat

