Webscraper for www.coinmarketcap.com
Welcome to Code Review SE, nice first question! Here are some of my comments, not pertaining to performance:


There's no reason to import modules in the body of scrape_coin_marketcap(). Just do it at the top of the source code file. If you need to be sure the modules are present at all, you can catch ImportError:

import sys

try:
    from bs4 import BeautifulSoup
    import requests
    import pandas as pd
except ImportError:
    sys.exit("This script requires Beautiful Soup 4, Requests and Pandas.")


Note: I'm using sys.exit() here instead of print(), because I'm assuming this is a standalone script and an ImportError should therefore be fatal.
The URL for the webpage is unlikely to change in the future, and isn't supposed to be modified at runtime, so you should mark it as a constant variable. Constants use the UPPERCASE_WITH_UNDERSCORES naming convention:

HISTORICAL_DATA_URL = "https://coinmarketcap.com/historical/"

This comment:

#Download HTML of links to historical CoinMarketCap data


... is pretty pointless. Anyone familiar with Python doesn't need that comment to understand what the snippet of code below it does. Only add comments to difficult to comprehend code, or to snippets that need extra attention for whatever reason.
The following pattern:

my_list = []
for x in some_iterable:
    my_list.append(some_function(x))


... is a good candidate for a list comprehension:

my_list = [some_function(x) for x in some_iterable]


... so in your case:

raw_links = [link.get("href") for link in soup.find_all("a")]


In fact, the part where you remove non-historical links could benefit from a list comprehension too:

historical_links = [
    "https://coinmarketcap.com/" + link for link in raw_links
    if "201" in str(link)
]

Don't mix single and double quotes. Either choice is valid, but mixing them is a bad idea. As an exception, you are encouraged to use single quotes if you need to output literal double quotes, and vice versa.
Unless you need access to the result of r.text later, don't bind it to a variable.
Debug / error messages should not be sent to stdout, but to stderr. You can do that by explicitly passing sys.stderr as a parameter to print():

import sys

...

print("Loading Packages...", file=sys.stderr)