code: def df_diff(df, periods=1, axis=0):
      """
      First discrete difference of element.
      Calculates the difference of a DataFrame element compared with another
      element in the DataFrame (default is the element in the same column
      of the previous row).
  
      Parameters
      ----------
      periods : int, default 1
          Periods to shift for calculating difference, accepts negative
          values.
      axis : {0 or 'index', 1 or 'columns'}, default 0
          Take difference over rows (0) or columns (1).
  
      Returns
      -------
      DataFrame
  
      See Also
      --------
      Series.diff : First discrete difference for a Series.
      DataFrame.pct_change : Percent change over given number of periods.
      DataFrame.shift : Shift index by desired number of periods with an
          optional time freq.
  
      Notes
      -----
      For boolean dtypes, this uses :meth:`operator.xor` rather than
      :meth:`operator.sub`.
  
      Examples
      --------
      Difference with previous row
  
      >>> import mars.dataframe as md
      >>> df = md.DataFrame({'a': [1, 2, 3, 4, 5, 6],
      ...                    'b': [1, 1, 2, 3, 5, 8],
      ...                    'c': [1, 4, 9, 16, 25, 36]})
      >>> df.execute()
         a  b   c
      0  1  1   1
      1  2  1   4
      2  3  2   9
      3  4  3  16
      4  5  5  25
      5  6  8  36
  
      >>> df.diff().execute()
           a    b     c
      0  NaN  NaN   NaN
      1  1.0  0.0   3.0
      2  1.0  1.0   5.0
      3  1.0  1.0   7.0
      4  1.0  2.0   9.0
      5  1.0  3.0  11.0
  
      Difference with previous column
  
      >>> df.diff(axis=1).execute()
          a    b     c
      0 NaN  0.0   0.0
      1 NaN -1.0   3.0
      2 NaN -1.0   7.0
      3 NaN -1.0  13.0
      4 NaN  0.0  20.0
      5 NaN  2.0  28.0
  
      Difference with 3rd previous row
  
      >>> df.diff(periods=3).execute()
           a    b     c
      0  NaN  NaN   NaN
      1  NaN  NaN   NaN
      2  NaN  NaN   NaN
      3  3.0  2.0  15.0
      4  3.0  4.0  21.0
      5  3.0  6.0  27.0
  
      Difference with following row
  
      >>> df.diff(periods=-1).execute()
           a    b     c
      0 -1.0  0.0  -3.0
      1 -1.0 -1.0  -5.0
      2 -1.0 -1.0  -7.0
      3 -1.0 -2.0  -9.0
      4 -1.0 -3.0 -11.0
      5  NaN  NaN   NaN
      """
      axis = validate_axis(axis, df)
      op = DataFrameDiff(periods=periods, axis=axis)
      return op(df)
  
imports: import itertools
  import numpy
  from ...None import opcodes
  from ...core import recursive_tile
  from ...serialization.serializables import AnyField, Int8Field, Int64Field
  from ..core import DATAFRAME_TYPE, OutputType
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import build_empty_df, build_empty_series, validate_axis
  from .shift import DataFrameShift
label_desc: Use image node_id 1 for calling a global function with example usage: df_diff(df, periods, axis) and returns: op