从dict在数据框中创建一个新列

use*_*092 0 python pandas

我有一只熊猫df:

     a   b  c
0   'k'  2  4
1   'l'  3  7
2   'm'  0  -3
3   'n'  4  4
Run Code Online (Sandbox Code Playgroud)

我有一个词:{'k':'kilo','l':'lima','m':'mike','n':'november'}

如何在我的df中创建一个新列,从dict中的那些键:

     a   b  c    new
0   'k'  2  4   'kilo'
1   'l'  3  7   'lima'
2   'm'  0  -3  'mike'
3   'n'  4  4   'november'
Run Code Online (Sandbox Code Playgroud)

谢谢.

EdC*_*ica 5

只需调用map并传递dict,这将根据dict中的值执行系列值的查找,这是矢量化的,并且比在循环中执行此操作要快得多:

In [26]:

t = {'k': 'kilo', 'l': 'lima', 'm': 'mike', 'n': 'november'}
df['new'] = df['a'].map(t)
df
Out[26]:
   a  b  c       new
0  k  2  4      kilo
1  l  3  7      lima
2  m  0 -3      mike
3  n  4  4  november
Run Code Online (Sandbox Code Playgroud)

我注意到在您的数据中,您的数据周围有引号,在这种情况下,上述操作无效,因为您的dict键只是一个字符,因此您需要为键指定带有引号的dict:

In [28]:

t = {"'k'": 'kilo', "'l'": 'lima', "'m'": 'mike', "'n'": 'november'}
df['new'] = df['a'].map(t)
df
Out[28]:
     a  b  c       new
0  'k'  2  4      kilo
1  'l'  3  7      lima
2  'm'  0 -3      mike
3  'n'  4  4  november
Run Code Online (Sandbox Code Playgroud)

但是,如果没有必要,我会删除引号:

In [30]:

df['a'] = df['a'].str.replace("'", '')
df['a']
Out[30]:
0    k
1    l
2    m
3    n
Name: a, dtype: object
Run Code Online (Sandbox Code Playgroud)