2017-11-11 1 views
-1

없이 다양한 크기의 dataframes을 결합가 나는 다음과 같은 방법을 결합하고자하는 2 dataframes가 NAN의

I A   B   C 
0 0.719391 0.091693 one 
1 0.951499 0.83716  one 
2 0.975212 0.224855 one 
3 0.80762  0.031284 three 
4 0.63319  0.342889 one 
5 0.075102 0.899291 two 
6 0.502843 0.773424 two 
7 0.032285 0.242476 one 
8 0.794938 0.607745 one 

DF2 :

I Y C 
0 1 one 
1 2 two 
2 3 three 

이 결과는 수 : df_comb :

I A   B   C  Y 
0 0.719391 0.091693 one  1 
1 0.951499 0.83716  one  1 
2 0.975212 0.224855 one  1 
3 0.80762  0.031284 three 3 
4 0.63319  0.342889 one  1 
5 0.075102 0.899291 two  2 
6 0.502843 0.773424 two  2 
7 0.032285 0.242476 one  1 
8 0.794938 0.607745 one  1 

그래서 df_comb의 Y 열에있는 모든 행 컬럼 C는 I 일부 가입 성공없이 병합하려고 열 Y.

년대 DF2에서 열 Y의 대응하는 값을 가져야 DF2의 컬럼 C의 값과 일치한다. for 루프를 사용하지 않고이를 수행하는 방법을 아는 사람이 있습니까?

감사

+0

우리는 병합에 당신의 실패한 시도를 볼 수 있을까요? 이것은 확실히 병합 문제처럼 보입니다. – ayhan

+0

@ayhan 속임수를 찾을 수 있습니까? –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ jezrael이 (가) 나를 때렸다. :) – ayhan

답변

3

옵션 1
df.map

df['Y']=df.C.map(df2.set_index('C')['Y']) 
df 
Out[164]: 
    I   A   B  C Y 
0 0 0.719391 0.091693 one 1 
1 1 0.951499 0.837160 one 1 
2 2 0.975212 0.224855 one 1 
3 3 0.807620 0.031284 three 3 
4 4 0.633190 0.342889 one 1 
5 5 0.075102 0.899291 two 2 
6 6 0.502843 0.773424 two 2 
7 7 0.032285 0.242476 one 1 
8 8 0.794938 0.607745 one 1 

옵션 2
df.merge

df.merge(df2, on='C', how='left') 

      A   B  C Y 
0 0.719391 0.091693 one 1 
1 0.951499 0.837160 one 1 
2 0.975212 0.224855 one 1 
3 0.633190 0.342889 one 1 
4 0.032285 0.242476 one 1 
5 0.794938 0.607745 one 1 
6 0.807620 0.031284 three 3 
7 0.075102 0.899291 two 2 
8 0.502843 0.773424 two 2 

옵션 3
df.replace

df.C.replace(df2.set_index('C').Y) 

I 
0 1 
1 1 
2 1 
3 3 
4 1 
5 2 
6 2 
7 1 
8 1 
Name: C, dtype: int64 
+0

답을 병합했습니다. 괜찮습니다. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ 좋은 대체 여기 :-) – Wen

+0

얘들 아, 아주 좋은 답변 (+1) – MaxU

관련 문제