<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def rmsd(df1, df2, s=None, invert=False):
 """Compute the Root Mean Square Deviation between molecules. Parameters df1 : pandas.DataFrame DataFrame with HETATM, ATOM, and/or ANISOU entries. df2 : pandas.DataFrame Second DataFrame for RMSD computation against df1. Must have the same number of entries as df1. s : {'main chain', 'hydrogen', 'c-alpha', 'heavy', 'carbon'} or None, default: None String to specify which entries to consider. If None, considers all atoms for comparison. invert : bool, default: False Inverts the string query if true. For example, the setting `s='hydrogen', invert=True` computes the RMSD based on all but hydrogen atoms. Returns --------- rmsd : float Root Mean Square Deviation between df1 and df2 """

        if df1.shape[0] != df2.shape[0]:
            raise AttributeError('DataFrames have unequal lengths')
        get_dict = PandasPdb._init_get_dict()
        if s:
            if s not in get_dict.keys():
                raise AttributeError('s must be in '
                                     '%s or None' % get_dict.keys())
            df1 = get_dict[s](df1, invert=invert)
            df2 = get_dict[s](df2, invert=invert)

        total = ((df1['x_coord'].values - df2['x_coord'].values)**2 +
                 (df1['y_coord'].values - df2['y_coord'].values)**2 +
                 (df1['z_coord'].values - df2['z_coord'].values)**2)
        rmsd = round((total.sum() / df1.shape[0])**0.5, 4)
        return rmsd