Skip to content

Commit 5730861

Browse files
committed
Add an axis parameter to DataFrame.diff
1 parent dcc7431 commit 5730861

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

doc/source/whatsnew/v0.16.1.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ We recommend that all users upgrade to this version.
1616

1717
Enhancements
1818
~~~~~~~~~~~~
19-
19+
- ``DataFrame.diff`` now takes an ``axis`` parameter
2020

2121

2222

pandas/core/frame.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3583,20 +3583,23 @@ def unstack(self, level=-1):
35833583
#----------------------------------------------------------------------
35843584
# Time series-related
35853585

3586-
def diff(self, periods=1):
3586+
def diff(self, periods=1, axis=1):
35873587
"""
35883588
1st discrete difference of object
35893589
35903590
Parameters
35913591
----------
35923592
periods : int, default 1
35933593
Periods to shift for forming difference
3594+
axis : {0 or 'index', 1 or 'columns'}
35943595
35953596
Returns
35963597
-------
35973598
diffed : DataFrame
35983599
"""
3599-
new_data = self._data.diff(n=periods)
3600+
axis = self._get_axis_number(axis)
3601+
3602+
new_data = self._data.diff(n=periods, axis=axis)
36003603
return self._constructor(new_data)
36013604

36023605
#----------------------------------------------------------------------

pandas/core/internals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -868,9 +868,9 @@ def take_nd(self, indexer, axis, new_mgr_locs=None, fill_tuple=None):
868868
def get_values(self, dtype=None):
869869
return self.values
870870

871-
def diff(self, n):
871+
def diff(self, n, axis=1):
872872
""" return block for the diff of the values """
873-
new_values = com.diff(self.values, n, axis=1)
873+
new_values = com.diff(self.values, n, axis=axis)
874874
return [make_block(values=new_values,
875875
ndim=self.ndim, fastpath=True,
876876
placement=self.mgr_locs)]

pandas/tests/test_frame.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9955,6 +9955,11 @@ def test_diff_float_n(self):
99559955
xp = self.tsframe.diff(1)
99569956
assert_frame_equal(rs, xp)
99579957

9958+
def test_diff_axis(self):
9959+
df = DataFrame([[1., 2.], [3., 4.]])
9960+
assert_frame_equal(df.diff(axis=0), DataFrame([[np.nan, 1.], [np.nan, 1.]]))
9961+
assert_frame_equal(df.diff(axis=1), DataFrame([[np.nan, np.nan], [2., 2.]]))
9962+
99589963
def test_pct_change(self):
99599964
rs = self.tsframe.pct_change(fill_method=None)
99609965
assert_frame_equal(rs, self.tsframe / self.tsframe.shift(1) - 1)

0 commit comments

Comments
 (0)