@@ -456,7 +456,7 @@ def _selected_obj(self):
456
456
def _set_selection_from_grouper (self ):
457
457
""" we may need create a selection if we have non-level groupers """
458
458
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 :
460
460
ax = self .obj ._info_axis
461
461
groupers = [ g .name for g in grp .groupings if g .level is None and g .name is not None and g .name in ax ]
462
462
if len (groupers ):
@@ -1029,12 +1029,23 @@ def _concat_objects(self, keys, values, not_indexed_same=False):
1029
1029
result = result .reindex (ax )
1030
1030
else :
1031
1031
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 )
1038
1049
else :
1039
1050
result = concat (values , axis = self .axis )
1040
1051
@@ -2528,6 +2539,7 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
2528
2539
elif hasattr (self .grouper , 'groupings' ):
2529
2540
if len (self .grouper .groupings ) > 1 :
2530
2541
key_index = MultiIndex .from_tuples (keys , names = key_names )
2542
+
2531
2543
else :
2532
2544
ping = self .grouper .groupings [0 ]
2533
2545
if len (keys ) == ping .ngroups :
@@ -2540,8 +2552,13 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
2540
2552
# reorder the values
2541
2553
values = [values [i ] for i in indexer ]
2542
2554
else :
2555
+
2543
2556
key_index = Index (keys , name = key_names [0 ])
2544
2557
2558
+ # don't use the key indexer
2559
+ if not self .as_index :
2560
+ key_index = None
2561
+
2545
2562
# make Nones an empty object
2546
2563
if com ._count_not_none (* values ) != len (values ):
2547
2564
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):
2611
2628
2612
2629
# normally use vstack as its faster than concat
2613
2630
# 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 :
2615
2632
stacked_values = np .vstack ([np .asarray (x ) for x in values ])
2616
2633
result = DataFrame (stacked_values ,index = key_index ,columns = index )
2617
2634
else :
0 commit comments