2017-01-19 1 views
4

딕셔너리 '다른'팬더 일치 내가 문제가

import pandas 

new_dict={ 
    'a':1, 
    'b':2, 
    'else':4 
} 
df=pandas.DataFrame([['new1','a'],['new2','b'],['new3','c'],['new4','d'],['new5','b']],columns=['new','id']) 

new id 
0 new1 a 
1 new2 b 
2 new3 c 
3 new4 d 
4 new5 b 

내가 원하는 결과 같은 DF :

new id 
0 new1 1 
1 new2 2 
2 new3 4 
3 new4 4 
4 new5 2 

내가 DICT를 변환하려고 데이터 프레임에 적용하고 병합 메서드를 사용합니다. 그러나 '다른이'일치하지 않습니다

import pandas 

new_dict={'newid':['a','b','else'], 
     'idd':[1,2,4]} 
df2=pandas.DataFrame(new_dict,columns=['newid','idd']) 
df=pandas.DataFrame([['new1','a'],['new2','b'],['new3','c'],['new4','d'],['new5','b']],columns=['new','id']) 

내가 사용 팬더는이 문제를 해결하는 방법을 병합,하지만 난 무엇을해야 다음 단계 모른다보십시오. 감사!

답변

3

당신은 map를 사용할 수 있습니다

df.id = df.id.map(new_dict).fillna(new_dict['else']).astype(int) 
print (df) 
    new id 
0 new1 1 
1 new2 2 
2 new3 4 
3 new4 4 
4 new5 2 

또 다른 해결책 numpy.where로 : 당신은뿐만 아니라 기능 map을 사용할 수 있습니다

df.id = np.where(df.id.isin(new_dict), df.id.map(new_dict), new_dict['else']).astype(int) 
print (df) 
    new id 
0 new1 1 
1 new2 2 
2 new3 4 
3 new4 4 
4 new5 2 
2

.
또한 내가 지정한 사전을 사용하지만 기본값을 지정할 수있는 get 방법을 통해 값에 액세스했습니다.

def new(x): 
    new_dict = dict(a=1, b=2) 
    return new_dict.get(x, 4) 

df=pd.DataFrame([ 
    ['new1','a'],['new2','b'], 
    ['new3','c'],['new4','d'], 
    ['new5','b']], 
    columns=['new','id']) 


df.id = df.id.map(new) 

print(df) 

    new id 
0 new1 1 
1 new2 2 
2 new3 4 
3 new4 4 
4 new5 2 
관련 문제