ENH: Functions for creating data frames and series "like" an existing one with different values
#### Problem
Sometimes I find myself needing a copy of a `DataFrame` or a `Series` with different values to the original. That is to say, with a similar index and column structure and naming. For example, it could occur when doing some numerical transformations which return NumPy arrays. The thing can of course be done by creating new objects by hand, but it becomes quite repetitive after a few lines.

#### Solution
Utilities like `np.zeros_like` are neat shorthands, and looks like Pandas has used them, at least in Indexing ([`reindex_like`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex_like.html)). I would like to see similar ways of constructing frames and series. I've written such shorthands for my personal use, but I think others could benefit from them being included in the library.

#### API breaking implications
This would introduce new functionality without affecting other parts of the system.

#### Describe alternatives you've considered
Doing it by hand is possible and pretty easy. It's only cumbersome, which the shorthand would solve.

#### Additional context
I'm not in the know of Pandas internal functionality, but the shorthands I've written are as follows:
```python
def df_like(data: Union[np.ndarray, pd.DataFrame], like: pd.DataFrame) -> pd.DataFrame:
    if isinstance(data, pd.DataFrame):
        data = data.values
    return pd.DataFrame(data, index=like.index, columns=like.columns)

def series_like(data: Union[np.ndarray, pd.Series], like: pd.Series) -> pd.Series:
    if isinstance(data, pd.Series):
        data = data.values
    return pd.Series(data, index=like.index, name=like.name)
```
If there's something else to account for, I would expect the functions to handle that as well. Maybe it could also be class method.
```python
class DataFrame:
    @classmethod
    def like(cls, data, like: "DataFrame") -> "DataFrame":
        if isinstance(data, cls):
            data = data.values
        return cls(data, index=like.index, columns=like.columns)
```

Looking forward to hearing your thoughts! I'd also be open to contributing these changes if an agreement is reached.