2017-09-29 1 views
1

두 개의 데이터 프레임이 있습니다. 하나는 작성자와 텍스트가 있고 다른 하나는 컬럼이 있으며 또 하나는 작성자와 성별과 분야가 있습니다.팬더 데이터 프레임 간의 데이터 일치

DF1 
==================================== 
author date text 
------------------------------------ 
a1  2006 "Thank you for..." 
a2  2007 "When I was asked..." 
a3  2014 "Biology is the ..." 
a2  2010 "In the intervening..." 

DF2 
==================================== 
author gender discipline 
------------------------------------ 
a2  male  psychologist 
a1  female neurologist 
a3  female biologist 

나는 pandas 문서를 통해 스크러빙 및 SO 검색 및 다른 사이트 내가 DF2에서 자신의 성별과 DF1에 저자를 일치 수있는 방법을 참조하려합니다. 새로운 데이터 프레임이 DF1의 모든 정보와 DF2의 추가 정보, 성별 및/또는 규율을 가진 경우 DF1에서 해당 작업을 수행할지 또는 새 데이터 프레임을 만들어야하는지 상관하지 않습니다.

코드 시작 부분이 없습니다. 모든 종류의 유니 코드 오류에 대한 DF2 스크럽을 마쳤으므로이 시점에서 약간의 재치가 있습니다.

답변

1

옵션 1
pd.DataFrame.merge

DF1.merge(DF2[['author', 'gender']], 'left') 

    author date      text gender 
0  a1 2006  "Thank you for..." female 
1  a2 2007 "When I was asked..." male 
2  a3 2014  "Biology is the ..." female 
3  a2 2010 "In the intervening..." male 

옵션 2
pd.Series.map

d = dict(DF2[['author', 'gender']].values) 
DF1.assign(gender=DF1.author.map(d)) 

    author date      text gender 
0  a1 2006  "Thank you for..." female 
1  a2 2007 "When I was asked..." male 
2  a3 2014  "Biology is the ..." female 
3  a2 2010 "In the intervening..." male 

옵티오 n은 d

d = DF2.set_index('author').gender 
DF1.assign(gender=DF1.author.map(d)) 

    author date      text gender 
0  a1 2006  "Thank you for..." female 
1  a2 2007 "When I was asked..." male 
2  a3 2014  "Biology is the ..." female 
3  a2 2010 "In the intervening..." male 

옵션 2.2
다른 방법을 만들기 위해 2.1

다른 방법은 d

d = dict(zip(DF2.author, DF2.gender)) 
DF1.assign(gender=DF1.author.map(d)) 

    author date      text gender 
0  a1 2006  "Thank you for..." female 
1  a2 2007 "When I was asked..." male 
2  a3 2014  "Biology is the ..." female 
3  a2 2010 "In the intervening..." male 

옵션을 3
01,237,312,295,

DF1.join(DF2.set_index('author').gender, on='author') 

    author date      text gender 
0  a1 2006  "Thank you for..." female 
1  a2 2007 "When I was asked..." male 
2  a3 2014  "Biology is the ..." female 
3  a2 2010 "In the intervening..." male 
+0

아주 완곡 moogly! 한 가지 대답에 세 가지 옵션이 있습니다! 라이브 데이터 프레임을 사용해 보도록하겠습니다. 다시 연락 드리겠습니다. –

+0

나는 지금 너를 상향 투표하고 있는데, 아직 답변이 없다는 것을 확신 할 수 없다. 옵션 1과 2.1 모두에서 KeyError : "[ 'author']가 인덱스에 없습니다. 그리고 나는이 시점에서 내가 뭘 잘못하고 있는지 지켜보기에는 너무 피곤하다고 확신합니다. 고마워요, 고마워요. 나는 아침에 다시 행복하게 할 것이며, 함께 할 때 수표를 줄 것이다. –

+0

즉,'author'는 데이터 프레임 중 하나의 컬럼 이름이 아닙니다. 이것은 종종 데이터를 파싱 할 때 우연히 헤더에 실수로 "author"와 같은 것을 얻는 경우에 발생합니다. 'DF1.columns' 또는'DF2.columns'에 해당하는지 확인하십시오. ''저자 ''와 같은 것을보아야합니다. 이 경우'DF1.columns = DF1.columns.str.strip()'을 사용하여 수정할 수 있습니다. – piRSquared

1
import pandas as pd 

df = pd.DataFrame({'author':['a1','a2','a3','a2'], 
          'date':[2006,2007,2014,2010], 
          'text':["Thank you for","when i was asked","i m the biology","in the intervening"]}) 


df2 = pd.DataFrame({'author':['a2','a1','a3'], 
        'gender':['male','female','female'], 
        'disciple':['pyshologist','neurologist','biologist']}) 




print(pd.merge(df,df2, on = 'author'))