@@ -955,7 +955,17 @@ def _concat(self, indexes: list[Index], name: Hashable) -> Index:
955
955
start = step = next_ = None
956
956
957
957
# Filter the empty indexes
958
- non_empty_indexes = [obj for obj in rng_indexes if len (obj )]
958
+ non_empty_indexes = []
959
+ all_same_index = True
960
+ prev : RangeIndex | None = None
961
+ for obj in rng_indexes :
962
+ if len (obj ):
963
+ non_empty_indexes .append (obj )
964
+ if all_same_index :
965
+ if prev is not None :
966
+ all_same_index = prev .equals (obj )
967
+ else :
968
+ prev = obj
959
969
960
970
for obj in non_empty_indexes :
961
971
rng = obj ._range
@@ -968,7 +978,12 @@ def _concat(self, indexes: list[Index], name: Hashable) -> Index:
968
978
elif step is None :
969
979
# First non-empty index had only one element
970
980
if rng .start == start :
971
- values = np .concatenate ([x ._values for x in rng_indexes ])
981
+ if all_same_index :
982
+ values = np .tile (
983
+ non_empty_indexes [0 ]._values , len (non_empty_indexes )
984
+ )
985
+ else :
986
+ values = np .concatenate ([x ._values for x in rng_indexes ])
972
987
result = self ._constructor (values )
973
988
return result .rename (name )
974
989
@@ -978,9 +993,13 @@ def _concat(self, indexes: list[Index], name: Hashable) -> Index:
978
993
next_ is not None and rng .start != next_
979
994
)
980
995
if non_consecutive :
981
- result = self ._constructor (
982
- np .concatenate ([x ._values for x in rng_indexes ])
983
- )
996
+ if all_same_index :
997
+ values = np .tile (
998
+ non_empty_indexes [0 ]._values , len (non_empty_indexes )
999
+ )
1000
+ else :
1001
+ values = np .concatenate ([x ._values for x in rng_indexes ])
1002
+ result = self ._constructor (values )
984
1003
return result .rename (name )
985
1004
986
1005
if step is not None :
0 commit comments