Set the column defined by `key` to the `value` provided.

        Args:
            key: The column name to set.
            value: The value to set the column to.

        Returns:
             A new QueryCompiler

def setitem(self, axis, key, value):
        """Set the column defined by `key` to the `value` provided.

        Args:
            key: The column name to set.
            value: The value to set the column to.

        Returns:
             A new QueryCompiler
        """

        def setitem(df, internal_indices=[]):
            def _setitem():
                if len(internal_indices) == 1:
                    if axis == 0:
                        df[df.columns[internal_indices[0]]] = value
                    else:
                        df.iloc[internal_indices[0]] = value
                else:
                    if axis == 0:
                        df[df.columns[internal_indices]] = value
                    else:
                        df.iloc[internal_indices] = value

            try:
                _setitem()
            except ValueError:
                # TODO: This is a workaround for a pyarrow serialization issue
                df = df.copy()
                _setitem()
            return df

        if axis == 0:
            numeric_indices = list(self.columns.get_indexer_for([key]))
        else:
            numeric_indices = list(self.index.get_indexer_for([key]))
        prepared_func = self._prepare_method(setitem)
        if is_list_like(value):
            new_data = self.data.apply_func_to_select_indices_along_full_axis(
                axis, prepared_func, numeric_indices, keep_remaining=True
            )
        else:
            new_data = self.data.apply_func_to_select_indices(
                axis, prepared_func, numeric_indices, keep_remaining=True
            )
        return self.__constructor__(new_data, self.index, self.columns)