Как я могу оптимизировать работу фильтра Pandas Dataframe? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть метод, который перебирает серию объектов pandas groupBy, затем фильтрует второй кадр данных на основе значений столбцов этих объектов и назначает счетчики групп столбцу во втором кадре данных (это делается с помощью. lo c и логические массивы)

Вот код:

compound_data_frame = {
        'category': {0: 'p1', 1: 'p1', 2: 'p2'},
        'description': {0: 'd1', 1: 'd2', 2: 'd3'},
        'category_order': {0: 'p1', 1: 'p1', 2: 'p2'},
        'position_in_sequence': {0: 'p1', 1: 'p1', 2: 'p2'},
        'categorical_property': {0: 'p1', 1: 'p1', 2: 'p2'},
    }
    compound_data_frame = pd.DataFrame(compound_data_frame)

    results = {
        'category': {0: 'p1', 1: 'p1', 2: 'p2'},
        'description': {0: 'd1', 1: 'd2', 2: 'd3'},
        'unit_type': {0: 'categorical_property', 1: 'categorical_property', 2: 'categorical_property'},
        'unit': {0: 'p1', 1: 'p1', 2: 'p2'}
        'count_start_previous_category_x': {0: 0, 1: 0, 2: 0}
    }
    results = pd.DataFrame(results)

counts = compound_data_frame.groupby(
                  ['category', 'description', 'category_order', 'position_in_sequence', 'categorical_property']).size()

for index, count in counts.iteritems():
    category_equality = (results['category'] == index[0])
    description_equality = (results['description'] == index[1])
    unit_type_equality = (results['unit_type'] == 'categorical_property')
    unit_equality = (results['unit'] == index[4])
    column_name = 'count_start_previous_category_x'
    results.loc[category_equality & description_equality & unit_type_equality & unit_equality, column_name] = count

Это занимает слишком много времени, и я хотел знать, это из-за группового или из-за отфильтровывая фрейм данных результатов для создания логических массивов или финального .lo c. Я думал о создании мультииндекса для соответствующих столбцов в кадре данных результатов, но я хотел бы оставить его структуру такой, какая она есть. Если кто-нибудь знает способ оптимизировать это, это будет высоко ценится.

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