@@ -88,8 +88,11 @@ def __init__(self, obj, grouper=None, axis=0, level=None,
88
88
self .level = level
89
89
90
90
if not as_index :
91
- assert (isinstance (obj , DataFrame ))
92
- assert (axis == 0 )
91
+ if not isinstance (obj , DataFrame ):
92
+ raise TypeError ('as_index=False only valid with DataFrame' )
93
+ if axis != 0 :
94
+ raise ValueError ('as_index=False only valid for axis=0' )
95
+
93
96
self .as_index = as_index
94
97
95
98
if groupings is None :
@@ -686,6 +689,9 @@ def aggregate(self, func_or_funcs, *args, **kwargs):
686
689
else :
687
690
ret = Series ({})
688
691
692
+ if not self .as_index : # pragma: no cover
693
+ print 'Warning, ignoring as_index=True'
694
+
689
695
return ret
690
696
691
697
def _wrap_aggregated_output (self , output , mask ):
@@ -858,6 +864,9 @@ def aggregate(self, arg, *args, **kwargs):
858
864
859
865
result = {}
860
866
if isinstance (arg , dict ):
867
+ if self .axis != 0 : # pragma: no cover
868
+ raise ValueError ('Can only pass dict with axis=0' )
869
+
861
870
for col , func in arg .iteritems ():
862
871
result [col ] = self [col ].agg (func )
863
872
@@ -870,6 +879,19 @@ def aggregate(self, arg, *args, **kwargs):
870
879
return self ._aggregate_item_by_item (arg , * args , ** kwargs )
871
880
result = self ._aggregate_generic (arg , * args , ** kwargs )
872
881
882
+ if not self .as_index :
883
+ if isinstance (result .index , MultiIndex ):
884
+ zipped = zip (result .index .levels , result .index .labels ,
885
+ result .index .names )
886
+ for i , (lev , lab , name ) in enumerate (zipped ):
887
+ result .insert (i , name , lev .values .take (lab ))
888
+ result = result .consolidate ()
889
+ else :
890
+ values = result .index .values
891
+ name = self .groupings [0 ].name
892
+ result .insert (0 , name , values )
893
+ result .index = np .arange (len (result ))
894
+
873
895
return result
874
896
875
897
def _aggregate_generic (self , func , * args , ** kwargs ):
0 commit comments