diff --git a/pandas/core/frame.py b/pandas/core/frame.py index dc5c6c0f67307..683f0e468bed7 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2335,7 +2335,7 @@ def set_index(self, keys, drop=True, append=False, inplace=False, frame.index = index return frame - def reset_index(self, level=None, drop=False): + def reset_index(self, level=None, drop=False, inplace=False): """ For DataFrame with multi-level index, return new DataFrame with labeling information in the columns under the index names, defaulting @@ -2350,12 +2350,17 @@ def reset_index(self, level=None, drop=False): default drop : boolean, default False Do not try to insert index into dataframe columns + inplace : boolean, default False + Modify the DataFrame in place (do not create a new object) Returns ------- resetted : DataFrame """ - new_obj = self.copy() + if inplace: + new_obj = self + else: + new_obj = self.copy() def _maybe_cast(values): if values.dtype == np.object_: diff --git a/pandas/core/series.py b/pandas/core/series.py index 1dbc240e7decc..b0cb0a1f4cded 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -750,7 +750,7 @@ def set_value(self, label, value): new_values = np.concatenate([self.values, [value]]) return Series(new_values, index=new_index, name=self.name) - def reset_index(self, drop=False, name=None): + def reset_index(self, drop=False, name=None, inplace=False): """ Analagous to the DataFrame.reset_index function, see docstring there. @@ -760,13 +760,21 @@ def reset_index(self, drop=False, name=None): Do not try to insert index into dataframe columns name : object, default None The name of the column corresponding to the Series values + inplace : boolean, default False + Modify the Series in place (do not create a new object) Returns ---------- resetted : DataFrame, or Series if drop == True """ if drop: - return Series(self, index=np.arange(len(self)), name=self.name) + if inplace: + self.index = np.arange(len(self)) + # set name if it was passed, otherwise, keep the previous name + self.name = name or self.name + return self + else: + return Series(self, index=np.arange(len(self)), name=self.name) else: from pandas.core.frame import DataFrame if name is None: diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index aab353a7e8ee7..da760860c6af8 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -6273,6 +6273,12 @@ def test_reset_index(self): xp = self.frame.reset_index().set_index(['index', 'B']) assert_frame_equal(rs, xp) + #test resetting in place + df = self.frame.copy() + resetted = self.frame.reset_index() + df.reset_index(inplace=True) + assert_frame_equal(df, resetted) + def test_reset_index_right_dtype(self): time = np.arange(0.0, 10, np.sqrt(2)/2) s1 = Series((9.81 * time ** 2) /2, diff --git a/pandas/tests/test_series.py b/pandas/tests/test_series.py index 0e5d4411c0a7f..364072a6a9007 100644 --- a/pandas/tests/test_series.py +++ b/pandas/tests/test_series.py @@ -2964,6 +2964,12 @@ def test_reset_index(self): df = ser.reset_index(name='value2') self.assert_('value2' in df) + #check inplace + s = ser.reset_index(drop=True) + s2 = ser + s2.reset_index(drop=True, inplace=True) + assert_series_equal(s, s2) + def test_timeseries_coercion(self): idx = tm.makeDateIndex(10000) ser = Series(np.random.randn(len(idx)), idx.astype(object))