python – 从Pandas中的字典映射部分字符串
发布时间:2020-12-20 11:51:54 所属栏目:Python 来源:网络整理
导读:我喜欢将字典键中的部分字符串映射到像这样的系列: df = pd.DataFrame(np.random.randint(0,10,size=(5,1)),columns=list('A'))df.insert(0,'n',['abcde Germany fffe','aaaa Norway bbbb','tttt Sweden','Croatia dfdfdf','Italy sfsd']) df n A0 abcde Ge
我喜欢将字典键中的部分字符串映射到像这样的系列:
df = pd.DataFrame(np.random.randint(0,10,size=(5,1)),columns=list('A')) df.insert(0,'n',['abcde Germany fffe','aaaa Norway bbbb','tttt Sweden','Croatia dfdfdf','Italy sfsd']) >>> df n A 0 abcde Germany fffe 2 1 aaaa Norway bbbb 1 2 tttt Sweden 4 3 Croatia dfdfdf 1 4 Italy sfsd 2 d = {'Germany':0.5,'Croatia':1.5,'Italy':1.5} 现在我喜欢将d键映射到n列以匹配部分字符串并设置倍数.我通过一个丑陋的循环实现了这一点: df['multiple'] = 1 for k,v in d.iteritems(): df['multiple'] = np.where(df['n'].str.contains(k),v,df['multiple']) >>> df n A multiple 0 abcde Germany fffe 2 0.5 1 aaaa Norway bbbb 1 1.0 2 tttt Sweden 4 1.0 3 Croatia dfdfdf 1 1.5 4 Italy sfsd 2 1.5 我有更好的,更多的熊猫方式吗?谢谢! 解决方法
这就是我提出的
解 pat = r'({})'.format('|'.join(d.keys())) extracted = df.n.str.extract(pat,expand=False).dropna() df['multiple'] = extracted.apply(lambda x: d[x]).reindex(df.index).fillna(1) 示范 打印df n A multiple 0 abcde Germany fffe 5 0.5 1 aaaa Norway bbbb 3 1.0 2 tttt Sweden 7 1.0 3 Croatia dfdfdf 5 1.5 4 Italy sfsd 9 1.5 说明 pat看起来像r'(克罗地亚|意大利|德国)’这是一个正则表达式,匹配任何由“|”分隔的选项内 ().在str.extract方法中使用时,它返回匹配的国家/地区.然后运行一个apply来获取字典值.并非所有系列值都会与dict中的键匹配,因此我们必须稍后再使用fillna. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读