Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions pandas/core/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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_:
Expand Down
12 changes: 10 additions & 2 deletions pandas/core/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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:
Expand Down
6 changes: 6 additions & 0 deletions pandas/tests/test_frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 6 additions & 0 deletions pandas/tests/test_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down