>假设我有以下字典dict = {'a': ['tool', 'device'], 'b': ['food', 'beverage']}
,
我有一个数据框,其中有一列的前 2 行值为'tools'
,'foods'
我想创建一个新列,其中第一个值是a
,第二个值是b
.
最好的方法是什么?
> 首先不要使用变量名称dict
,因为内置(python代码字)。然后交换字典的值 - 带有新字典键的值,按字典的键Series.str.findall
从列中获取值,并通过字典Series.map
获取新列的值:
d = {'a': ['tool', 'device'], 'b': ['food', 'beverage']}
df = pd.DataFrame({'col':['tools','foods']})
d1 = {k: oldk for oldk, oldv in d.items() for k in oldv}
print (d1)
{'tool': 'a', 'device': 'a', 'food': 'b', 'beverage': 'b'}
df['new'] = df['col'].str.findall('|'.join(d1.keys())).str[0].map(d1)
print (df)
col new
0 tools a
1 foods b
或:
df['new'] = df['col'].str.extract('({})'.format('|'.join(d1.keys())), expand=False).map(d1)