2016-12-20 2 views
1

과 중첩하여 dataframe을 팬더 :부분은 다음 두 dataframes위한 다른

df1 = pd.DataFrame({'name': pd.Series(["A", "B", "C"]), 'value': pd.Series([1., 2., 3.])}) 

    name value 
0 A 1.0 
1 B 2.0 
2 C 3.0 

df2 = pd.DataFrame({'name': pd.Series(["A", "C", "D"]), 'value': pd.Series([1., 3., 5.])}) 

    name value 
0 A 1.0 
1 C 3.0 
2 D 5.0 

name 열의 값 df1name 열의 값과 중첩 어디 df2에서만 행을 유지하고자 즉, 다음과 같은 dataframe 생산 : 나는 접근 방법을 시도

 name value 
0 A 1.0 
1 C 3.0 

을하지만 난 파이썬과 팬더 새로운 오전 및 C의 행을 수행하는 이유 R.에서 오는 구문을 인정하지 않아 오데는 일하지 않고 무엇을하겠습니까?

df2[df2["name"] in df1["name"]] 

답변

3

당신은 isin 사용할 수 있습니다

print (df2[df2["name"].isin(df1["name"])]) 
    name value 
0 A 1.0 
1 C 3.0 

numpy.intersect1d 또 다른 빠른 솔루션 :

val = np.intersect1d(df2["name"], df1["name"]) 
print (val) 
['A' 'C'] 

print (df2[df2.name.isin(val)]) 
    name value 
0 A 1.0 
1 C 3.0 
1

약간 다른 방법을 실제 데이터에 유용 할 수 있습니다, 당신은 "내부를 사용할 수 있습니다 조인 "(교차점) 라 SQL. 더 유용한 당신의 열이 당신에게 단지 df1 행에 대한 두 left의 교회법을 줄 것이다 howouter에 변경

df1 = pd.DataFrame({'name': pd.Series(["A", "B", "C"]), 'value': pd.Series([1., 2., 3.])}) 
df2 = pd.DataFrame({'name': pd.Series(["A", "C", "D"]), 'value': pd.Series([1., 3., 5.])}) 

# supposedly for the join you should be able to tell join on='<column_name>', 'name' here, 
# but wasn't working for me. 
df1.set_index('name', inplace=True) 
df2.set_index('name', inplace=True) 

df1.join(df2, how='inner', rsuffix='_other') 

#  value value_other 
# name      
# A  1.0   1.0 
# C  3.0   3.0 

(예를 들어, 두 개의 서로 다른 데이터 일반적인 키 세트를 병합) 두 데이터 프레임에서 중복되지 않는 경우 df2에 대해서는 right입니다.