2017-10-10 6 views
1

이 두 가지 기능은 저와 같습니다. 열 c와 d가 동일하므로 아래 코드에서 동일한 목표를 달성 한 것을 볼 수 있습니다. 언제 다른 하나를 사용해야합니까?combine_first와 fillna의 차이점은 무엇입니까?

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=list('ab')) 
df.loc[::2, 'a'] = np.nan 

반환 :

 a b 
0 NaN 4 
1 2.0 6 
2 NaN 8 
3 0.0 4 
4 NaN 4 
5 0.0 8 
6 NaN 7 
7 2.0 2 
8 NaN 9 
9 7.0 2 

이 나의 출발점이 여기에

은 예입니다. 지금은 fillna을 사용하여 두 사람이 combine_first 사용하여 열 및 하나를 추가하며, 이러한 항목은 동일한 결과를 생성합니다 :

df['c'] = df.a.combine_first(df.b) 
df['d'] = df['a'].fillna(df['b']) 

반환 값 : 데이터 세트에 대한이 질문에

 a b c d 
0 NaN 4 4.0 4.0 
1 8.0 7 8.0 8.0 
2 NaN 2 2.0 2.0 
3 3.0 0 3.0 3.0 
4 NaN 0 0.0 0.0 
5 2.0 4 2.0 2.0 
6 NaN 0 0.0 0.0 
7 2.0 6 2.0 2.0 
8 NaN 4 4.0 4.0 
9 4.0 6 4.0 4.0 

제공 : Combine Pandas data frame column values into new column

+1

저는 팬더에 익숙하지 않지만 [fillna] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html)로 더 많은 제어권을 가지고있는 것으로 보입니다. [combine_first] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.combine_first.html)는 일회성 계약입니다 – Wondercricket

답변

5

combine_first은 중첩되지 않는 인덱스가있을 때 사용하기위한 것입니다. 첫 번째 열에 없던 인덱스와 열에 대해 값을 제공 할뿐만 아니라 null을 효과적으로 채 웁니다. 모든 인덱스와 열이 결과 지금 dfb에서 새로운 열 또는 인덱스가 포함되지 우리가 fillna

dfa.fillna(dfb) 

    w x y 
a 1 2.0 3 
b 4 1.0 5 # 1.0 filled in from `dfb` 

주의 경우

에 포함되어

dfa = pd.DataFrame([[1, 2, 3], [4, np.nan, 5]], ['a', 'b'], ['w', 'x', 'y']) 
dfb = pd.DataFrame([[1, 2, 3], [3, 4, 5]], ['b', 'c'], ['x', 'y', 'z']) 

dfa.combine_first(dfb) 

    w x y z 
a 1.0 2.0 3.0 NaN 
b 4.0 1.0 5.0 3.0 # 1.0 filled from `dfb`; 5.0 was in `dfa`; 3.0 new column 
c NaN 3.0 4.0 5.0 # whole new index 

알 수 있습니다. dfa은 인덱스와 열 정보를 공유하는 null 값만 채 웁니다. 귀하의 경우에는


, 당신은 인덱스와 같은 하나 개의 컬럼에 fillnacombine_first를 사용합니다. 이것들은 사실 똑같은 것으로 해석됩니다.