2017-05-30 69 views
2

我有一个像这样的名字列表的熊猫数据框柱:值映射到每个项目在大熊猫名单

Names 
Roger Williams, Anne Graham 
Joe Smoe, Elliot Ezekiel 
Todd Roger 

和字典与user_ids:

map = {Roger Williams: 1234, Anne Graham: 4892, Joe Smoe: 898, Elliot Ezekiel: 8458, Todd Roger: 856}

我需要使用pandas .map函数来映射列表中的每个名字与user_id,像这样:

Names       user_id 
Roger Williams, Anne Graham  1234, 4892 
Joe Smoe, Elliot Ezekiel  898, 8458 
Todd Roger      856 

有人可以帮我完成这个吗?我真的很难过。谢谢!

+0

'威廉斯,安妮Graham' - 它是一个字符串或字符串列表:'[ '威廉斯', '安妮·格雷厄姆']'? – MaxU

回答

2

杠杆pd.Seriesastype(str)

df.replace(pd.Series(m).astype(str), regex=True) 

     Names 
0 1234, 4892 
1 898, 8458 
2   856 

设置

df = pd.DataFrame({ 
     'Names': [ 
      'Roger Williams, Anne Graham', 
      'Joe Smoe, Elliot Ezekiel', 
      'Todd Roger' 
     ] 
    }) 

m = { 
    'Roger Williams': 1234, 'Anne Graham': 4892, 
    'Joe Smoe': 898, 'Elliot Ezekiel': 8458, 'Todd Roger': 856 
} 
0

这里有一个办法:

import pandas as pd 

map = {'Roger Williams': 1234, 'Anne Graham': 4892, 'Joe Smoe': 898, 
     'Elliot Ezekiel': 8458, 'Todd Roger': 856} 

df1 = pd.DataFrame.from_dict(map, orient='index') 
df = df1.reset_index().rename(columns={'index': 'name', 0: 'user_id'}) 
2
In [124]: mapping 
Out[124]: 
{'Anne Graham': 4892, 
'Elliot Ezekiel': 8458, 
'Joe Smoe': 898, 
'Roger Williams': 1234, 
'Todd Roger': 856} 

In [125]: df 
Out[125]: 
         Names 
0 Roger Williams, Anne Graham 
1  Joe Smoe, Elliot Ezekiel 
2     Todd Roger 

In [126]: df.replace(mapping.keys(), list(map(str, mapping.values())), regex=True) 
Out[126]: 
     Names 
0 1234, 4892 
1 898, 8458 
2   856 

,如果你有一个字符串列表:

In [131]: df 
Out[131]: 
          Names 
0 [Roger Williams, Anne Graham] 
1  [Joe Smoe, Elliot Ezekiel] 
2     [Todd Roger] 

In [133]: df.Names.apply(', '.join).replace(mapping.keys(), list(map(str, mapping.values())), regex=True) 
Out[133]: 
0 1234, 4892 
1  898, 8458 
2   856 
Name: Names, dtype: object 
0
def get_values(g): 
    return ", ".join([map[x] for x in g]) 

df['Names'] = df['Names'].map(get_values) 

0 1234, 4892 
1  898, 8458 
2   856 
Name: Names, dtype: object