python里loc函数取反问题

问题遇到的现象和发生背景

python里分析企业数据集,如果公司类型为民营,则定义新列‘companytype’='民营‘,国企为国企,合资为合资,否则为其他。

问题相关代码,请勿粘贴截图

1、wagedata.loc[~(wagedata['7'].str.contains("民营|国企|合资",na=False)),'companytype']='其他'
2、wagedata.loc[(wagedata['7'].str.contains("民营")),'companytype']='民营'
3、wagedata.loc[(wagedata['7'].str.contains("国企")),'companytype']='国企'
4、wagedata.loc[(wagedata['7'].str.contains("合资")),'companytype']='合资'

运行结果及报错内容

按照上述1 2 3 4运行,没问题,企业类型是对的。
但是,如果把第一行代码放到最后,即运行2 3 4 1,则所有公司类型均为“其他”了。为什么,请教解答一下。

我的解答思路和尝试过的方法

我的理解:1为取反,先执行2 3 4,再执行1,应该也没问题,不知道为什么全变成其他。

说明你第一句就匹配了所有啊,按照1、2、3、4运行没问题,是因为第1句把所有的都改成“其他”,然后后面2、3、4又改回来了。而先运行2、3、4的话,到第一句又把所有都改成“其他”了。
原因在于匹配的字符串不正确,你这里用的是中文的分隔符,换成英文的试试呢。"民营|国企|合资" ==> "民营|国企|合资"