2016-11-17 45 views
6

Yalnızca bir miktar örtüşen göstergeye ve sütuna sahip iki veri çerçevem ​​var.Veri çerçevelerini pandalar çıkarırken NaN'ler

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))) 

ben aralarındaki farkı hesaplamak istiyoruz ve bu endeks ve sütunlar eşleşmiyor NaN'ler birçok verir

delta = new - old 

çalıştı. İndislerin ve sütunların eksikliğini sıfırlar olarak kabul etmek istiyorum (eski ['n', 'D'] = 0). eski her zaman yeni bir altuzay olacaktır.

Herhangi bir fikrin var mı?

DÜZENLEME: Bunu yeterince açıklayamadım. Delta veri çerçevesini sıfır ile doldurmak istemiyorum. Eksik indisleri ve sütunları eski sanki sıfırlarmış gibi ele almak istiyorum. Daha sonra değeri bir NaN yerine delta cinsinden yeni ['n', 'D'] olarak alırdım. fill_value=0 ile

+1

çağrı 'delta = delta.fillna (0)' Ben bunu iyice yeterince izah yoktu sanırım nan – EdChum

+0

değerleri yerine. Delta veri çerçevesini sıfır ile doldurmak istemiyorum. Eksik indisleri ve sütunları eski sanki sıfırlarmış gibi ele almak istiyorum. Daha sonra değeri bir NaN yerine delta cinsinden yeni ['n', 'D'] olarak alırdım. –

+0

PC'ye geri döndüğümde yeniden açacağım, temel olarak ne yapmak istediğinizi hem dfs sütunları hem de endeksleri, hem dfs'i yeniden doldurup hem de nan'i sıfır ile doldurup – EdChum

cevap

5

Kullanım 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

Bir çekicilik gibi çalışır! Teşekkür ederim! –

+0

cevabımı kabul edebilecek bir endişe yok, cevabım – EdChum

+0

'un üst solunda boş bir onay işareti olacak: '(yeni - eski) .fillna (0)' – dmeu

İlgili konular