Поиск комбинаций, которые соответствуют порогам для подгрупп - PullRequest
1 голос
/ 16 октября 2019

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

...