2017-10-09 2 views
1

저는 두 개의 불균형 데이터 프레임을 가지고 있으며 그 사이의 델타 값을 빼서 세 번째 데이터 프레임을 만들고 싶습니다. 다음은 세 가지 데이터 프레임의 예입니다. 나는 CURRENT를 가져 가고 싶습니다. DELTA를 얻으려면 EXPECTED를 뺍니다. 이것은 예상대로 작동하며 CURRENT 및 EXPECTED의 값이 존재하면 DELTA에서 올바른 결과를 생성합니다. 그러나 존재하지 않으면 델타에서 NaN을 얻습니다.팬더에서 두 개의 불균형 데이터 프레임 빼기

 CURRENT 
     Region1 Region2 
type1 5   3 
type2 2   11 
type3 7   1 

     EXPECTED 
     Region1 Region2 
type1 15   1 
type2 6   4 

     DELTA 
     Region1 Region2 
type1 -10  2 
type2 -4   7 
type3 7   1 

현재 코드에서 DELTA의 type3 행은 NaN, NaN입니다.

def get_delta(self, CURRENT, EXPECTED): 
    delta = CURRENT 
    delta['Region1'] = current[['Region1']] - \ 
           expected[['Region1']] 
    delta['Region2'] = current[['Region2']] - \ 
           expected[['Region2']] 
    return delta 

나는 delta.isnull() 또는 delta.empty가 있는지 확인하려고했지만 그 중 하나가 작동하지 않습니다. 본질적으로 나는 EXPECTED에 존재하지 않는 값을 0으로 취급하고 싶습니다. 그런 다음 DELETE를 얻기 위해 CURRENT-RESERVED 뺄셈을하십시오. I는, 또는 0

같이 적절한 행/지수 예상에 행 누락 채워 I 시도 I 0 같은 NaN를 처리하여 수행 할 수 같다 :

new_df = pd.concat([CURRENT, EXPECTED], axis=1).fillna(0) 

하고 거기에서 감산 그러나 내가 concat을 시도 할 때 "ValueError : shape mismatch : 모양의 값 배열 (0,13)이 모양 (1,13)의 색인 결과에 브로드 캐스팅 될 수 없으므로"무슨 일이 일어나는지 확실하지 않습니다.

답변

0

당신은 매개 변수 fill_value=0DataFrame.sub 필요

DELTA = CURRENT.sub(EXPECTED, fill_value=0) 
print (DELTA) 
     Region1 Region2 
type1 -10.0  2.0 
type2  -4.0  7.0 
type3  7.0  1.0 
+0

감사합니다! 이것은 필자가 필요로하고 코드에서 전체 델타 함수를 제거하도록 허용 한 것입니다. – Aaron

+0

당신은 환영합니다. – jezrael

0

사용 reindex

In [217]: CURRENT - EXPECTED.reindex(CURRENT.index, fill_value=0) 
Out[217]: 
     Region1 Region2 
type1  -10  2 
type2  -4  7 
type3  7  1 

세부

In [218]: CURRENT 
Out[218]: 
     Region1 Region2 
type1  5  3 
type2  2  11 
type3  7  1 

In [219]: EXPECTED 
Out[219]: 
     Region1 Region2 
type1  15  1 
type2  6  4 
관련 문제