Цикл Pandas Dataframe и обновление из базы данных - PullRequest
0 голосов
/ 28 января 2019

Для данного pandas dataframe df , который выглядит следующим образом:

p_id | sales | salesperson | year
1    | 10,000| None        | 2017
2    | 15,000| None        | 2016
5    | 7,000 | None        | 2014
5    | 3,000 | None        | 2015

Существует таблица SQL, person , которая выглядит следующим образом:

p_id | p_name        | from_year | to_year
1    | Brian Griffin | 2017      | Null
2    | Quagmire      | 2016      | Null
5    | Cleveland     | 2014      | 2015
5    | Lois Griffin  | 2015      | Null

Я пытаюсь заполнить отсутствующие данные в моем кадре данных из таблицы SQL.P_id может быть повторно использован, если он используется 1 человеком за раз.

Я сделал следующее:

for index, row in df.iterrows():
     df.at[index, 'salesperson'] = fetch_name(row['p_id'], row['year'])

def fetch_name(pid, year):
     meta = sqlalchemy.MetaData()
     persons = sqlalchemy.Table('persons', meta, autoload=True, autoload_with=data_engine)

     stmt = sqlalchemy.select([persons.c.p_name]).where(
            and_(persons.c.p_id == pid, and_(year >= persons.c.from_year, 
            or_(year < persons.c.to_year, persons.c.to_year.is_(None))))

     name = data_engine.execute(stmt).scalar()

     return name

Это отлично работает, но очень медленно.Для кадра данных из 30 000 строк требуется около 20 минут для сопоставления и заполнения отсутствующих данных.

Есть ли лучший способ достичь того же результата?

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