创建一个列,其中每行的值是指定字典的键,基于现有列是否包含该字典值作为子字符串?



>假设我有以下字典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)

最新更新