GET multiple data frames using external module's function that uses requests
Your docstrings look a bit weird to me. The first line is usually a summary of what the function does. In your first function that line comes after the parameters and in the second one it does not exist at all. In get_stats when describing the parameter symbols there is no need to describe what the function internally does with it (i.e. split it up). This is an implementation detail (if it mutated the original list that might be worth mentioning but you don't do that).
I would put the chunking line into its own function, so you could change it if you want to at some time:

def chunks(it, n):
    """Splits `it` into chunks of length `n` (last chunk might be smaller)."""
   return [it[i : i + n] for i in range(0, len(it), n)]

The processing part is unnecessarily long. You could just write:

def get_stats(symbols):
    """
    :param symbols: List of symbols (can only send 100 at a time, 
    so these may need to be broken up)
    :return: Pandas DataFrame with stats
    """
    with Pool() as pool:
        return pd.concat(pool.starmap(iex_get_stat, chunks(symbols, 99))))


Note that when exiting, this calls pool.terminate() instead of pool.close(); pool.join(). If you want to switch to the async methods this means that it will not wait for your workers to finish, but since you are not (I think), it should be fine.

Pool also automatically chooses os.cpu_count() when no number of processes is passed.
I would also move encapsulating each batch within another list into iex_get_stat, so you can just pass it a list instead (which is then actually what it says in the docstring):

def iex_get_stat(batch):
    """ 
    :param batch: batch is a list of stock tickers (ex: ["AAPL", "MSFT", "TSLA"]
    Gets and returns DataFrames of stats on a list of stocks 
    """
    return Stock([batch], output_format="pandas").get_key_stats().T