在Pandas中映射字典中的部分字符串

2024-09-29 22:00:07 发布

您现在位置: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                   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列,以匹配部分字符串并设置倍数。我通过一个难看的循环实现了这一点:

^{pr2}$

我有更好更通俗的方法吗?谢谢!在


Tags: 字符串df字典aaaaabcdegermanycroatiaitaly
2条回答

这就是我想到的

解决方案

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)

演示

打印数据框

^{pr2}$

说明

pat看起来像r'(Croatia|Italy|Germany)',这是一个正则表达式,它与()中由'|'分隔的任何选项匹配。当在str.extract方法中使用时,它返回匹配的国家。然后运行apply来获取字典值。并不是所有的序列值都会被dict中的键匹配,所以我们必须dropna然后fillna稍后。在

df['multiple'] = df['n'].str.extract('('+'|'.join(list(d))+')').map(d).fillna(1)
print df

                    n  A  multiple
0  abcde Germany fffe  7       0.5
1    aaaa Norway bbbb  0       1.0
2         tttt Sweden  3       1.0
3      Croatia dfdfdf  8       1.5
4          Italy sfsd  4       1.5

相关问题 更多 >

    热门问题