2016-11-17 4 views
6

인덱스와 겹치는 인덱스가 두 개인 데이터 프레임이 두 개 있습니다.데이터 프레임을 뺄 때의 NaN 팬더

old = pd.DataFrame(index = ['A', 'B', 'C'], 
        columns = ['k', 'l', 'm'], 
        data = abs(np.floor(np.random.rand(3, 3)*10))) 

new = pd.DataFrame(index = ['A', 'B', 'C', 'D'], 
        columns = ['k', 'l', 'm', 'n'], 
        data = abs(np.floor(np.random.rand(4, 4)*10))) 

나는 그들 사이의 차이를 계산하는 원하고이 인덱스와 열이 일치하지 않는 NaN을 많이 제공

delta = new - old 

을 시도했다. 나는 인덱스와 컬럼의 절대 값을 0으로 다루고 싶습니다. (old [ 'n', 'D'] = 0). old는 항상 새로운 부분 공간이됩니다.

아이디어가 있으십니까?

편집 : 나는 충분히 철저히 설명하지 않았다고 생각한다. 델타 데이터 프레임을 0으로 채우고 싶지 않습니다. 누락 된 색인과 열을 마치 오래된 것처럼 취급하고 싶습니다. 그런 다음 NaN 대신 델타에서 새 [ 'n', 'D'] 값을 얻습니다. fill_value=0

+1

전화'델타 = delta.fillna (0)'나는 그것을 철저하게 충분히 설명하지 않은 추측 유모가 – EdChum

+0

값 대체. 델타 데이터 프레임을 0으로 채우고 싶지 않습니다. 누락 된 색인과 열을 마치 오래된 것처럼 취급하고 싶습니다. 그런 다음 NaN 대신 델타에서 새 [ 'n', 'D'] 값을 얻습니다. –

+0

PC로 돌아 가면 다시 열어 보겠습니다. 기본적으로 원하는 것은 dfs 열과 인덱스를 결합하여 dfs를 모두 다시 색인하고 0으로 나노를 채우고 빼기입니다. – EdChum

답변

5

사용 sub :

In [15]: 
old = pd.DataFrame(index = ['A', 'B', 'C'], 
        columns = ['k', 'l', 'm'], 
        data = abs(np.floor(np.random.rand(3, 3)*10))) 
​ 
new = pd.DataFrame(index = ['A', 'B', 'C', 'D'], 
        columns = ['k', 'l', 'm', 'n'], 
        data = abs(np.floor(np.random.rand(4, 4)*10))) 
delta = new.sub(old, fill_value=0) 
delta 

Out[15]: 
    k l m n 
A 0 3 -9 7 
B 0 -2 1 8 
C -4 1 1 7 
D 8 6 0 6 
+0

매력처럼 작동합니다! 고맙습니다! –

+0

걱정하지 않아도 내 대답을 받아 들일 수 있습니다. 내 대답 – EdChum

+0

의 왼쪽 상단에 빈 체크 표시가 나타납니다.'(new - old) .fillna (0)' – dmeu

관련 문제