0
두 개의 데이터 프레임이 있는데 첫 번째 데이터 프레임의 특정 열을 조건부로 업데이트해야합니다. DF1의 식별자 칼럼 == '갑'이 I DF2로부터 대응하는 열이 열 DF1 D, E, F를 업데이트해야 다른 데이터 프레임에서 조건부로 업데이트 된 팬더
df1 = pd.DataFrame([[1,'Foo',1,1,1,np.nan,np.nan,np.nan],[2,'Foo',2,2,2,np.nan,np.nan,np.nan],[3,'Bar',3,3,3,np.nan,np.nan,np.nan]], columns = ['Key','identifier','A','B','C','D','E','F'])
print df1
Key identifier A B C D E F
0 1 Foo 1 1 1 NaN NaN NaN
1 2 Foo 2 2 2 NaN NaN NaN
2 3 Bar 3 3 3 NaN NaN NaN
df2 = pd.DataFrame([[1,np.nan,10,10,10,5,6,7],[2,np.nan,12,12,12,8,9,10],[3,np.nan,13,13,13,11,12,13]], columns = ['Key','identifier','A','B','C','D','E','F'])
print df2
Key identifier A B C D E F
0 1 NaN 10 10 10 5 6 7
1 2 NaN 12 12 12 8 9 10
2 3 NaN 13 13 13 11 12 13
. 조건부로 세 열을 어떻게 업데이트 할 수 있습니까?
df3 = #code here
는
원하는 출력 :
df1 = pd.DataFrame([[1,'Foo',1,1,1,np.nan,np.nan,np.nan],[4,'Bar',4,4,4,np.nan,np.nan,np.nan],[2,'Foo',2,2,2,np.nan,np.nan,np.nan],[3,'Bar',3,3,3,np.nan,np.nan,np.nan]], columns = ['Key','identifier','A','B','C','D','E','F'])
지금 DF1의 길이와 DF2 '그런가 :
print df3
Key identifier A B C D E F
0 1 Foo 1 1 1 5.0 6.0 7.0
1 2 Foo 2 2 2 8.0 9.0 10.0
2 3 Bar 3 3 3 NaN NaN NaN
후속
말 대신, DF1은 다음을이었다 업데이트 할 레코드의 위치 지정과 일치하지 않습니다. 이 기능은 어떻게 계속 작동합니까? set_index
와 인덱스에 Key
을 설정 한 후,
df2[df1['identifier'] == 'Foo'].combine_first(df1)
Key identifier A B C D E F
0 1.0 Foo 10.0 10.0 10.0 5.0 6.0 7.0
1 4.0 Bar 4.0 4.0 4.0 NaN NaN NaN
2 3.0 Foo 13.0 13.0 13.0 11.0 12.0 13.0
3 3.0 Bar 3.0 3.0 3.0 NaN NaN NaN
덕분에,이 올바른, 다음에 해당합니다? df2 [ 'identifier'] == 'Foo']. combine_first (df1) – flyingmeatball
@flyingmeatball 그것은 그렇습니다. 나는 단지 귀여워지기를 원했다. –
감사합니다. 후속 조치를 추가했습니다. df1에 4 개의 항목이 있고 df2에 3 개의 항목이 있고 올바른 순서로 있지 않은 경우 왜 계속 작동하는지 설명 할 수 있습니까? – flyingmeatball