У меня есть метод, который перебирает серию объектов 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. Я думал о создании мультииндекса для соответствующих столбцов в кадре данных результатов, но я хотел бы оставить его структуру такой, какая она есть. Если кто-нибудь знает способ оптимизировать это, это будет высоко ценится.