Я пытался сделать этот код лучше / быстрее и более устойчивым, но пока не смог его улучшить.
По сути, мне нужно l oop в списке кортежей и объединить каждый элемент кортежа с выражением фильтра dataframe точно так, как показано в решении. Однако кортежи в моем списке не имеют одинаковую длину, и они могут меняться и иметь разную длину, иногда я могу получить кортежи с менее чем 4 элементами в каждом, иногда более 6 или даже 7/8 и т. Д. на.
Мое решение работает, но мне нужно будет редактировать каждый раз, когда увеличивается длина моих кортежей, и я знаю, что это не самое эффективное решение. Как бы я итерировал внутри кортежей, используя длину каждого кортежа в мою пользу, чтобы избежать вложенных ifs?
Цените ваши советы и комментарии
Фактический список:
Comb = [(),
('RD00',),
('RDC2',),
('RDC3',),
('RDC4',),
('RD00', 'RDC2'),
('RD00', 'RDC3'),
('RD00', 'RDC4'),
('RDC2', 'RDC3'),
('RDC2', 'RDC4'),
('RDC3', 'RDC4'),
('RD00', 'RDC2', 'RDC3'),
('RD00', 'RDC2', 'RDC4'),
('RD00', 'RDC3', 'RDC4'),
('RDC2', 'RDC3', 'RDC4'),
('RD00', 'RDC2', 'RDC3', 'RDC4')]
Я придумал это Решение , мне нужно объединить элементы кортежей в каждом кортеже и добавить выражение перед каждым элементом в кортеже:
for p in comb:
if len(p) == 1:
print(''"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')"))
if len(p) == 2:
print(''"(fF2_Principal['Messagetype']=="'{} & '" (fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')"))
elif len(p) == 3:
print(''"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')","'"+p[2]+"')"))
elif len(p) == 4:
print(''"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{} & '" (fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')","'"+p[2]+"')","'"+p[3]+"')"))
elif len(p) == 5: # not done yet, my previous data had 5 elements in one tuple
print('{} : {} : {} : {} : {}'.format(p[0], p[1],p[2],p[3],p[4]))
Приведенный выше код генерирует следующие результаты, которые работают для моей цели, однако я не могу отслеживать данные, чтобы увидеть, когда будет присутствовать другая длина кортежей.
Результаты :
(fF2_Principal['Messagetype']=='RD00')
(fF2_Principal['Messagetype']=='RDC2')
(fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC3') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC3') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC3') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC3') & (fF2_Principal['Messagetype']=='RDC4')
Очень ценю ваши комментарии и советы, как улучшить этот код и сделать его более устойчивым.