# pandas.DataFrame.sub

`DataFrame.``sub`(other, axis='columns', level=None, fill_value=None)

  Get Subtraction of dataframe and other, element-wise (binary operator sub).

  Equivalent to `dataframe - other`, but with support to substitute a fill_value for missing data in one of the inputs. With reverse version, rsub.

  Among flexible wrappers (add, sub, mul, div, mod, pow) to arithmetic operators: +, -, *, /, //, %, **.

  Parameters:

  other : scalar, sequence, Series, or DataFrame

  > Any single or multiple element data structure, or list-like object.

  axis : {0 or ‘index’, 1 or ‘columns’}

  > Whether to compare by the index (0 or ‘index’) or columns (1 or ‘columns’). For Series input, axis to match Series index on.

  level : int or label

  > Broadcast across a level, matching Index values on the passed MultiIndex level.

  fill_value : float or None, default None

  > Fill existing missing (NaN) values, and any new element needed for successful DataFrame alignment, with this value before computation. If data in both corresponding DataFrame locations is missing the result will be missing.

  Returns:

  DataFrame

  > Result of the arithmetic operation.

  See also

  `DataFrame.add`
    Add DataFrames.
  `DataFrame.sub`
    Subtract DataFrames.
  `DataFrame.mul`
    Multiply DataFrames.
  `DataFrame.div`
    Divide DataFrames (float division).
  `DataFrame.truediv`
    Divide DataFrames (float division).
  `DataFrame.floordiv`
    Divide DataFrames (integer division).
  `DataFrame.mod`
    Calculate modulo (remainder after division).
  `DataFrame.pow`
    Calculate exponential power.

  Notes

  Mismatched indices will be unioned together.

  Examples

      >>> df = pd.DataFrame({'angles': [0, 3, 4],
      ...                    'degrees': [360, 180, 360]},
      ...                   index=['circle', 'triangle', 'rectangle'])
      >>> df
                 angles  degrees
      circle          0      360
      triangle        3      180
      rectangle       4      360

  Add a scalar with operator version which return the same results.

      >>> df + 1
                 angles  degrees
      circle          1      361
      triangle        4      181
      rectangle       5      361

      >>> df.add(1)
                 angles  degrees
      circle          1      361
      triangle        4      181
      rectangle       5      361

  Divide by constant with reverse version.

      >>> df.div(10)
                 angles  degrees
      circle        0.0     36.0
      triangle      0.3     18.0
      rectangle     0.4     36.0

      >>> df.rdiv(10)
                   angles   degrees
      circle          inf  0.027778
      triangle   3.333333  0.055556
      rectangle  2.500000  0.027778

  Subtract a list and Series by axis with operator version.

      >>> df - [1, 2]
                 angles  degrees
      circle         -1      358
      triangle        2      178
      rectangle       3      358

      >>> df.sub([1, 2], axis='columns')
                 angles  degrees
      circle         -1      358
      triangle        2      178
      rectangle       3      358

      >>> df.sub(pd.Series([1, 1, 1], index=['circle', 'triangle', 'rectangle']),
      ...        axis='index')
                 angles  degrees
      circle         -1      359
      triangle        2      179
      rectangle       3      359

  Multiply a DataFrame of different shape with operator version.

      >>> other = pd.DataFrame({'angles': [0, 3, 4]},
      ...                      index=['circle', 'triangle', 'rectangle'])
      >>> other
                 angles
      circle          0
      triangle        3
      rectangle       4

      >>> df * other
                 angles  degrees
      circle          0      NaN
      triangle        9      NaN
      rectangle      16      NaN

      >>> df.mul(other, fill_value=0)
                 angles  degrees
      circle          0      0.0
      triangle        9      0.0
      rectangle      16      0.0

  Divide by a MultiIndex by level.

      >>> df_multindex = pd.DataFrame({'angles': [0, 3, 4, 4, 5, 6],
      ...                              'degrees': [360, 180, 360, 360, 540, 720]},
      ...                             index=[['A', 'A', 'A', 'B', 'B', 'B'],
      ...                                    ['circle', 'triangle', 'rectangle',
      ...                                     'square', 'pentagon', 'hexagon']])
      >>> df_multindex
                   angles  degrees
      A circle          0      360
        triangle        3      180
        rectangle       4      360
      B square          4      360
        pentagon        5      540
        hexagon         6      720

      >>> df.div(df_multindex, level=1, fill_value=0)
                   angles  degrees
      A circle        NaN      1.0
        triangle      1.0      1.0
        rectangle     1.0      1.0
      B square        0.0      0.0
        pentagon      0.0      0.0
        hexagon       0.0      0.0

Scroll To Top