Как ускорить вложенный l oop через DataFrame в Python? - PullRequest
0 голосов
/ 11 марта 2020

Я написал скрипт, в котором хочу сравнить 2 AMI (вид идентификатора AWS экземпляра) в Pandas DataFrame. Я импортирую данные из файла CSV, который содержит почти 9000 строк. В столбце «Продукт» у меня есть название системы, которая работает на этом (это может быть Linux / UNIX, Red Hat Enterprise Linux или Windows). Я сравниваю эти AMI, один из Linux, а другой из Red Hat с двумя вложенными циклами, и, если они совпадают в новом столбце «Система», присвойте им имя «Linux / UNIX». Единственное, что я улучшил в этом сценарии, - это то, что первый l oop (диапазон i) проходит только через экземпляры Linux / UNIX, а диапазон j - через экземпляры Red Hat, потому что перед запуском я отсортировал DataFrame по «Product» столбец, и теперь я в диапазоне 5600 строк и J в диапазоне 1600 вместо 9000x9000. Это значительно улучшило время выполнения. Тем не менее, это все еще слишком медленно. Есть ли шанс ускорить его еще больше? Спасибо заранее!

dfs - мой отсортированный DataFrame.

dfs=df.sort_values("Product",axis=0,ascending=True).reset_index(drop=True).copy()

for i in range(0,len(dfs)-list(dfs["Product"])[::-1].index("Linux/UNIX")):
    for j in range(list(dfs["Product"]).index("Red Hat Enterprise Linux"),len(dfs)-list(dfs["Product"])[::-1].index("Red Hat Enterprise Linux")):
        if dfs['AMI'][i]==dfs['AMI'][j]:
            dfs['System'][i]="Linux/UNIX"
            dfs['System'][j]="Linux/UNIX"
        else:
            dfs['System'][i]="Linux/UNIX"
            dfs['System'][j]="Red Hat Enterprise Linux"

Я хочу что-то подобное: enter image description here

Когда AMI одинаков для разных продуктов (Linux и Red Hat), он должен быть указан в столбце «Система» Linux / UNIX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...