다른 데이터 프레임 Python Pandas를 기반으로 열 값을 바꾸시겠습니까? (초보자) [중복]

Nov 13 2020

2 개의 데이터 프레임이 있습니다.

df1에는 df2의 값으로 대체하려는 NaN이 많이 있습니다. df2의 값 수는 df1의 NaN 수와 동일합니다.

가입, 병합 및 생성주기를 시도했지만 성공하지 못했습니다.

미리 감사드립니다!

pd.Dataframe 1
0          NaN
1        240.0
2        229.0
3       1084.0
4       2078.0
        ....
Name: Healthcare_1, Length: 9999, dtype: float64

pd.Dataframe 2
0        830.0
6        100.0
7        100.0
8        830.0
9       1046.0
         ...  
Name: Healthcare_1, Length: 4797, dtype: float64

답변

1 RuthgerRighart Nov 13 2020 at 04:51

내 대답에서 DataFrame1에서 NAN이 발생하는 행은 이러한 NAN을 대체해야하는 DataFrame2의 행과 동일한 인덱스를 가지고 있다고 가정합니다.

다음 모듈을로드하십시오.

import pandas as pd
import numpy as np

두 가지 예제 DataFrame이 있습니다.

df1 = pd.DataFrame({'c1': [np.nan, 240, np.nan, 1084, 2078]})
df2 = pd.DataFrame({'c1': [830, 100, 100, 830, 1046]}, index=[0,2,7,8,9])

df1에서 NAN이 발생하는 인덱스를 확인합니다.

ind = list(np.where(df1['c1'].isnull()))[0]

이러한 인덱스가 df2에서 발생하는 위치를 확인하십시오. 이것은 array ([True, True, False, False, False])를 제공해야합니다 .

df2.index.isin(list(ind))

df1의 값을 색인에서 df2의 값으로 바꿉니다 ind.

df1[df1.index.isin(ind)] = df2[df2.index.isin(ind)]

1 SandervandenOord Nov 13 2020 at 05:07

해결 방법 1 : .update () 를 사용 하여 df1의 nan 값을 df2의 해당 값으로 바꿉니다.

df1 = pd.Series([np.nan, 240, 229, 1084, 2078])
df2 = pd.Series([830, 100, 100, 830, 1046], index=[0, 6, 7, 8, 9])

df1.update(df2)

해결 방법 2 : .combine_first () 를 사용 하여 첫 번째 데이터 프레임의 np.nan 값을 두 번째 데이터 프레임의 값으로 채울 수도 있습니다 .

df1.combine_first(df2).iloc[df1.index]

결과 데이터 프레임 :

    0
0   830.0
1   240.0
2   229.0
3   1084.0
4   2078.0