2013-05-31 18 views
5

İçinde 'nan' ile indisleri bırakma seçeneği yok mu? Sanırım sessizce bu satırları pivottan düşürmek bir noktada ciddi bir acıya neden olur.python pandas: pivot_table nans ile sessizce indeksler

import pandas 
import numpy 

a = [['a', 'b', 12, 12, 12], ['a', numpy.nan, 12.3, 233., 12], ['b', 'a', 123.23, 123, 1], ['a', 'b', 1, 1, 1.]] 

df = pandas.DataFrame(a, columns=['a', 'b', 'c', 'd', 'e']) 

df_pivot = df.pivot_table(rows=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum) 
print(df) 
print(df_pivot) 

Çıktı: https://github.com/pydata/pandas/issues/3729: Bu, şu anda desteklenmemektedir

a b  c d e 
0 a b 12.00 12 12 
1 a NaN 12.30 233 12 
2 b a 123.23 123 1 
3 a b 1.00 1 1 
      c d e 
a b     
a b 13.00 13 13 
b a 123.23 123 1 

cevap

6

, geliştirme için bu sorunu görüyoruz.

Çözüm sahte, pivot ile endeksini doldurun ve

In [28]: df = df.reset_index() 

In [29]: df['b'] = df['b'].fillna('dummy') 

In [30]: df['dummy'] = np.nan 

In [31]: df 
Out[31]: 
    a  b  c d e dummy 
0 a  b 12.00 12 12 NaN 
1 a dummy 12.30 233 12 NaN 
2 b  a 123.23 123 1 NaN 
3 a  b 1.00 1 1 NaN 

In [32]: df.pivot_table(rows=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum) 
Out[32]: 
       c d e 
a b      
a b  13.00 13 13 
    dummy 12.30 233 12 
b a  123.23 123 1 

In [33]: df.pivot_table(rows=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum).reset_index().replace('dummy',np.nan).set_index(['a','b']) 
Out[33]: 
      c d e 
a b     
a b  13.00 13 13 
    NaN 12.30 233 12 
b a 123.23 123 1 
+0

Belki birisi nan değerleri endeksinde vardır bir uyarı mesajı enjekte edebilir yerine? Gerçekten bunun "desteklenmesi" gerektiğini görmüyorum. Elle doldurulama iyidir, sadece yapılması gerektiğini bilmek zorundasınız. – mathtick

+0

Sorun şu ki, bu bir 'özellik', çünkü bir grupla gruplandırdığınızda ve bir NaN'e sahip olduğunuzda; Bunu kontrol eden bir seçeneğiniz olabilir (ve varsayılan olarak yanlıştır); ve/veya yükseltir – Jeff

+0

Katılıyorum ama birisinin herhangi bir kişinin bu özelliği nasıl algılayacağını bir uyarı hayal edemiyorum. Uyarıyı yazdırmamak için pivot_table içinde bir bayrak bile olabilir. Sadece güvenlik konusunda endişeliyim. – mathtick