다른 데이터 프레임 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