Skip to content

Commit d207a3e

Browse files
committed
reverted most of changes as they are not the right solution to the issue
1 parent 53797b7 commit d207a3e

File tree

6 files changed

+24
-94
lines changed

6 files changed

+24
-94
lines changed

doc/source/whatsnew/v1.0.0.rst

-5
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,6 @@ Other enhancements
207207
- The ``partition_cols`` argument in :meth:`DataFrame.to_parquet` now accepts a string (:issue:`27117`)
208208
- :func:`to_parquet` now appropriately handles the ``schema`` argument for user defined schemas in the pyarrow engine. (:issue: `30270`)
209209
- DataFrame constructor preserve `ExtensionArray` dtype with `ExtensionArray` (:issue:`11363`)
210-
- Added `positional` optional parameter in :meth:`DataFrame.reorder_levels` to specify the type of levels to use, labels or positions or both (:issue:`30289`)
211-
- Added `positional` optional parameter in :meth:`MultiIndex.reorder_levels` to specify the type of levels to use, labels or positions or both (:issue:`30289`)
212210

213211

214212
Build Changes
@@ -717,10 +715,8 @@ Datetimelike
717715
- Bug in :func:`pandas.to_datetime` failing for `deques` when using ``cache=True`` (the default) (:issue:`29403`)
718716
- Bug in :meth:`Series.item` with ``datetime64`` or ``timedelta64`` dtype, :meth:`DatetimeIndex.item`, and :meth:`TimedeltaIndex.item` returning an integer instead of a :class:`Timestamp` or :class:`Timedelta` (:issue:`30175`)
719717
- Bug in :class:`DatetimeIndex` addition when adding a non-optimized :class:`DateOffset` incorrectly dropping timezone information (:issue:`30336`)
720-
- Bug in :meth:`DataFrame.drop` where attempting to drop non-existent values from a DatetimeIndex would yield a confusing error message (:issue:`30399`)
721718
- Bug in :meth:`DataFrame.append` would remove the timezone-awareness of new data (:issue:`30238`)
722719

723-
724720
Timedelta
725721
^^^^^^^^^
726722
- Bug in subtracting a :class:`TimedeltaIndex` or :class:`TimedeltaArray` from a ``np.datetime64`` object (:issue:`29558`)
@@ -850,7 +846,6 @@ Groupby/resample/rolling
850846
- Bug in :meth:`DataFrameGroupBy.agg` with timezone-aware datetime64 column incorrectly casting results to the original dtype (:issue:`29641`)
851847
- Bug in :meth:`DataFrame.groupby` when using axis=1 and having a single level columns index (:issue:`30208`)
852848
- Bug in :meth:`DataFrame.groupby` when using nunique on axis=1 (:issue:`30253`)
853-
- Bug in :meth:`GroupBy.quantile` with multiple q values when columns are integers (:issue:`30289`)
854849

855850
Reshaping
856851
^^^^^^^^^

pandas/core/frame.py

+3-11
Original file line numberDiff line numberDiff line change
@@ -5040,7 +5040,7 @@ def swaplevel(self, i=-2, j=-1, axis=0):
50405040
result.columns = result.columns.swaplevel(i, j)
50415041
return result
50425042

5043-
def reorder_levels(self, order, axis=0, positional=None):
5043+
def reorder_levels(self, order, axis=0):
50445044
"""
50455045
Rearrange index levels using input order. May not drop or duplicate levels.
50465046
@@ -5051,14 +5051,6 @@ def reorder_levels(self, order, axis=0, positional=None):
50515051
(position) or by key (label).
50525052
axis : int
50535053
Where to reorder levels.
5054-
positional : bool, optional
5055-
How to interpret integer values in `order`.
5056-
5057-
* None (default): prefer treating the values as labels,
5058-
but fall back to positional if no label with that
5059-
value is value.
5060-
* True : only treat integer values as positions.
5061-
* False : only treat integer values as labels.
50625054
50635055
Returns
50645056
-------
@@ -5071,9 +5063,9 @@ def reorder_levels(self, order, axis=0, positional=None):
50715063
result = self.copy()
50725064

50735065
if axis == 0:
5074-
result.index = result.index.reorder_levels(order, positional=positional)
5066+
result.index = result.index.reorder_levels(order)
50755067
else:
5076-
result.columns = result.columns.reorder_levels(order, positional=positional)
5068+
result.columns = result.columns.reorder_levels(order)
50775069
return result
50785070

50795071
# ----------------------------------------------------------------------

pandas/core/groupby/groupby.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1938,9 +1938,7 @@ def post_processor(vals: np.ndarray, inference: Optional[Type]) -> np.ndarray:
19381938
# but this hits https://github.com/pandas-dev/pandas/issues/10710
19391939
# which doesn't reorder the list-like `q` on the inner level.
19401940
order = np.roll(list(range(result.index.nlevels)), -1)
1941-
result = result.reorder_levels(
1942-
order, positional=True
1943-
) # GH30289: reorder based on position, not labels
1941+
result = result.reorder_levels(order)
19441942
result = result.reindex(q, level=-1)
19451943

19461944
# fix order.

pandas/core/indexes/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4551,7 +4551,7 @@ def get_indexer_non_unique(self, target):
45514551

45524552
if is_categorical(target):
45534553
tgt_values = np.asarray(target)
4554-
elif self.is_all_dates and target.is_all_dates: # GH 30399
4554+
elif self.is_all_dates:
45554555
tgt_values = target.asi8
45564556
else:
45574557
tgt_values = target._ndarray_values

pandas/core/indexes/multi.py

+19-58
Original file line numberDiff line numberDiff line change
@@ -1282,53 +1282,31 @@ def _constructor(self):
12821282
def inferred_type(self) -> str:
12831283
return "mixed"
12841284

1285-
def _get_level_number_by_label(self, label) -> int:
1286-
try:
1287-
level = self.names.index(label)
1288-
except ValueError:
1289-
raise KeyError(f"Level {label} not found")
1290-
return level
1291-
1292-
def _get_level_number_by_position(self, pos) -> int:
1293-
"""
1294-
Returns level number at given position
1295-
1296-
Parameters
1297-
----------
1298-
pos : level position given in python list index style which may be negative
1299-
1300-
Raises
1301-
------
1302-
IndexError if pos is out of range
1303-
"""
1304-
if pos < 0:
1305-
pos += self.nlevels
1306-
if pos < 0:
1307-
orig_pos = pos - self.nlevels
1308-
raise IndexError(
1309-
f"Too many levels: Index has only {self.nlevels} levels,"
1310-
f" {orig_pos} is not a valid level number"
1311-
)
1312-
# Note: levels are zero-based
1313-
elif pos >= self.nlevels:
1314-
raise IndexError(
1315-
f"Too many levels: Index has only {self.nlevels} levels, "
1316-
f"not {pos + 1}"
1317-
)
1318-
return pos
1319-
13201285
def _get_level_number(self, level) -> int:
13211286
count = self.names.count(level)
13221287
if (count > 1) and not is_integer(level):
13231288
raise ValueError(
13241289
f"The name {level} occurs multiple times, use a level number"
13251290
)
13261291
try:
1327-
level = self._get_level_number_by_label(level)
1328-
except KeyError:
1292+
level = self.names.index(level)
1293+
except ValueError:
13291294
if not is_integer(level):
1330-
raise
1331-
level = self._get_level_number_by_position(level)
1295+
raise KeyError(f"Level {level} not found")
1296+
elif level < 0:
1297+
level += self.nlevels
1298+
if level < 0:
1299+
orig_level = level - self.nlevels
1300+
raise IndexError(
1301+
f"Too many levels: Index has only {self.nlevels} levels,"
1302+
f" {orig_level} is not a valid level number"
1303+
)
1304+
# Note: levels are zero-based
1305+
elif level >= self.nlevels:
1306+
raise IndexError(
1307+
f"Too many levels: Index has only {self.nlevels} levels, "
1308+
f"not {level + 1}"
1309+
)
13321310
return level
13331311

13341312
_tuples = None
@@ -2193,35 +2171,18 @@ def swaplevel(self, i=-2, j=-1):
21932171
levels=new_levels, codes=new_codes, names=new_names, verify_integrity=False
21942172
)
21952173

2196-
def reorder_levels(self, order, positional=None):
2174+
def reorder_levels(self, order):
21972175
"""
21982176
Rearrange levels using input order. May not drop or duplicate levels.
21992177
22002178
Parameters
22012179
----------
2202-
order : list
2203-
the order of index levels after reorder, could be level labels or positions
2204-
positional : bool, optional
2205-
How to interpret integer values in `order`.
2206-
2207-
* None (default): prefer treating the values as labels,
2208-
but fall back to positional if no label with that
2209-
value is value.
2210-
* True : only treat integer values as positions.
2211-
* False : only treat integer values as labels.
22122180
22132181
Returns
22142182
-------
22152183
MultiIndex
22162184
"""
2217-
# GH30289
2218-
if positional is None:
2219-
order = [self._get_level_number(i) for i in order]
2220-
elif positional:
2221-
order = [self._get_level_number_by_position(i) for i in order]
2222-
else:
2223-
order = [self._get_level_number_by_label(i) for i in order]
2224-
2185+
order = [self._get_level_number(i) for i in order]
22252186
if len(order) != self.nlevels:
22262187
raise AssertionError(
22272188
f"Length of order must be same as number of levels ({self.nlevels}),"

pandas/tests/indexes/multi/test_drop.py

-16
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,3 @@ def test_drop_not_lexsorted():
139139
tm.assert_index_equal(lexsorted_mi, not_lexsorted_mi)
140140
with tm.assert_produces_warning(PerformanceWarning):
141141
tm.assert_index_equal(lexsorted_mi.drop("a"), not_lexsorted_mi.drop("a"))
142-
143-
144-
def test_drop_with_non_unique_datetime_index_and_invalid_keys():
145-
# GH 30399
146-
147-
# define dataframe with unique datetime index
148-
df = pd.DataFrame(
149-
np.random.randn(5, 3),
150-
columns=["a", "b", "c"],
151-
index=pd.date_range("2012", freq="H", periods=5),
152-
)
153-
# create dataframe with non-unique datetime index
154-
df = df.iloc[[0, 2, 2, 3]].copy()
155-
156-
with pytest.raises(KeyError, match="not found in axis"):
157-
df.drop(["a", "b"]) # Dropping with labels not exist in the index

0 commit comments

Comments
 (0)