2013-05-31 5 views
5

Gibt es eine Option nicht die Indizes mit 'nan' in sie fallen lassen? Ich denke, dass das stumme Fallenlassen dieser Reihen aus dem Drehpunkt irgendwann zu ernsthaften Schmerzen führen wird.python pandas: pivot_table lässt automatisch Indizes mit nans fallen

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) 

Ausgang:

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 

Antwort

6

Dies wird derzeit nicht unterstützt werden, finden Sie diese Ausgabe für die Verbesserung: https://github.com/pydata/pandas/issues/3729.

Behelfslösung den Index mit einem Dummy, schwenken, füllen und ersetzen jemand eine Warnmeldung injizieren könnte

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

Vielleicht, wenn gibt es nan Werte im Index? Ich sehe nicht, dass es wirklich "unterstützt" werden muss. Manuelles Füllen ist in Ordnung, man muss nur wissen, dass es getan werden muss. – mathtick

+0

Das Problem ist, dass dies ein "Feature" ist, dass wenn Sie groupby und ein NaN haben, ausgeschlossen ist; Ich nehme an, Sie könnten eine Option haben, die das steuert (und standardmäßig falsch ist); und/oder wirft – Jeff

+0

Ich stimme zu, aber ich kann mir nicht vorstellen, dass eine Warnung irgendjemandes Vorstellung des Merkmals brechen würde. Sie könnten sogar eine Flagge in pivot_table haben, um die Warnung nicht zu drucken. Ich mache mir nur Sorgen um die Sicherheit. – mathtick

Verwandte Themen