Мне нужно найти все комбинации строк, где выполняются несколько условий. Я попытался использовать рецепт powerset от itertools и ответить здесь , добавив несколько условий, но не могу заставить условия работать должным образом. Код, который я придумал:
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
df_groups = pd.concat(
[data.reindex(l).assign(Group = n) for n, l in
enumerate(powerset(data.index)) ])
if ((data.loc[l, 'Account'] == 'COS').any() & (data.loc[l,'Amount'].sum() >= 100)
& (data.loc[l,'Account'] == 'Rev').any() & (data.loc[l, 'Amount'].sum() >= 150)
& (data.loc[l,'Account'] == 'Inv').any() and (data.loc[l, 'Amount'].sum() >= 60)))] )
То, что я пытаюсь сделать выше, - это найти только те комбинации, где следующие / превышены следующие пороговые значения:
Account Amount
COS 150
Rev 100
Inv 60
Образец данных:
Entity Account Amount Location
A10 Rev 60 A
B01 Rev 90 B
C11 Rev 80 C
B01 COS 90 B
C11 COS 80 C
A10 Inv 60 A
Заранее извиняюсь за плохой вопрос написания этикета, я впервые не смог найти ответ на Stackoverflow и мне пришлось спроситьвопрос.
Кроме того, помните, что это будет очень медленно по мере увеличения len (данных), поэтому любые предложения на этот счет также будут высоко оценены.