def df_for_properties_and_keys(computed_properties, keys):
    """Assemble a dataframe with the raw data from many computed properties and keys

    Args:
        computed_properties (list of JobPostingComputedProperty)
        keys (list of strs)

    Returns: pandas.DataFrame
    """
    dataframes = [
        computed_property.df_for_keys(keys)
        for computed_property in computed_properties
    ]
    return dataframes[0].join(dataframes[1:])