@@ -456,7 +456,7 @@ def _selected_obj(self):
456456 def _set_selection_from_grouper (self ):
457457 """ we may need create a selection if we have non-level groupers """
458458 grp = self .grouper
459- if self ._selection is None and getattr (grp ,'groupings' ,None ) is not None :
459+ if self ._selection is None and self . as_index and getattr (grp ,'groupings' ,None ) is not None :
460460 ax = self .obj ._info_axis
461461 groupers = [ g .name for g in grp .groupings if g .level is None and g .name is not None and g .name in ax ]
462462 if len (groupers ):
@@ -1029,12 +1029,23 @@ def _concat_objects(self, keys, values, not_indexed_same=False):
10291029 result = result .reindex (ax )
10301030 else :
10311031 result = result .reindex_axis (ax , axis = self .axis )
1032- elif self .group_keys and self .as_index :
1033- group_keys = keys
1034- group_levels = self .grouper .levels
1035- group_names = self .grouper .names
1036- result = concat (values , axis = self .axis , keys = group_keys ,
1037- levels = group_levels , names = group_names )
1032+
1033+ elif self .group_keys :
1034+
1035+ if self .as_index :
1036+
1037+ # possible MI return case
1038+ group_keys = keys
1039+ group_levels = self .grouper .levels
1040+ group_names = self .grouper .names
1041+ result = concat (values , axis = self .axis , keys = group_keys ,
1042+ levels = group_levels , names = group_names )
1043+ else :
1044+
1045+ # GH5610, returns a MI, with the first level being a
1046+ # range index
1047+ keys = list (range (len (values )))
1048+ result = concat (values , axis = self .axis , keys = keys )
10381049 else :
10391050 result = concat (values , axis = self .axis )
10401051
@@ -2528,6 +2539,7 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
25282539 elif hasattr (self .grouper , 'groupings' ):
25292540 if len (self .grouper .groupings ) > 1 :
25302541 key_index = MultiIndex .from_tuples (keys , names = key_names )
2542+
25312543 else :
25322544 ping = self .grouper .groupings [0 ]
25332545 if len (keys ) == ping .ngroups :
@@ -2540,8 +2552,13 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
25402552 # reorder the values
25412553 values = [values [i ] for i in indexer ]
25422554 else :
2555+
25432556 key_index = Index (keys , name = key_names [0 ])
25442557
2558+ # don't use the key indexer
2559+ if not self .as_index :
2560+ key_index = None
2561+
25452562 # make Nones an empty object
25462563 if com ._count_not_none (* values ) != len (values ):
25472564 v = next (v for v in values if v is not None )
@@ -2611,7 +2628,7 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
26112628
26122629 # normally use vstack as its faster than concat
26132630 # and if we have mi-columns
2614- if not _np_version_under1p7 or isinstance (v .index ,MultiIndex ):
2631+ if not _np_version_under1p7 or isinstance (v .index ,MultiIndex ) or key_index is None :
26152632 stacked_values = np .vstack ([np .asarray (x ) for x in values ])
26162633 result = DataFrame (stacked_values ,index = key_index ,columns = index )
26172634 else :
0 commit comments