2017-05-30 70 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