def add_virtual_column(self, name, expression, unique=False):
type = "<STR_LIT>" if name in self.virtual_columns else "<STR_LIT>"<EOL>expression = _ensure_string_from_expression(expression)<EOL>if name in self.get_column_names(virtual=False):<EOL><INDENT>renamed = '<STR_LIT>' +vaex.utils.find_valid_name(name, used=self.get_column_names())<EOL>expression = self._rename(name, renamed, expression)[<NUM_LIT:0>].expression<EOL><DEDENT>name = vaex.utils.find_valid_name(name, used=[] if not unique else self.get_column_names())<EOL>self.virtual_columns[name] = expression<EOL>self.column_names.append(name)<EOL>self._save_assign_expression(name)<EOL>self.signal_column_changed.emit(self, name, "<STR_LIT>")<EOL>
Add a virtual column to the DataFrame.

        Example:

        >>> df.add_virtual_column("r", "sqrt(x**2 + y**2 + z**2)")
        >>> df.select("r < 10")

        :param: str name: name of virtual column
        :param: expression: expression for the column
        :param str unique: if name is already used, make it unique by adding a postfix, e.g. _1, or _2