Чтобы завершить это и было полезно для третьих лиц, вот мое окончательное решение: я использовал обходной путь, который был побочным продуктом следующих шагов, но будет аналогичен решениям, опубликованным Йосуа.
- create новый столбец, который помечает транзакции как «расходы» или «доход», а затем запускает if l oop, пока не достигнет первого «дохода», и добавьте его.
´
transaction_class_card = pd.Series([], dtype = 'object')
for index, i in enumerate(df_card['transaction_category_name']):
if i in card_inc:
transaction_class_card[index] = "income"
elif i in card_exp:
transaction_class_card[index] = "expense"
else:
transaction_class_card[index] = "NOT_CLASSIFIED"
df_card.insert(loc = len(df_card.columns), column = "transaction_class", value = transaction_class_card)
´
После добавления нового столбца я использую функцию «Последовательность», чтобы перебирать строки как кортежи и останавливаться, как только я нажимаю «доход», затем добавляются все «расходы» перед тем up.
Разделение фрейма данных
df_1 = df_card[['unique_mem_id', 'amount', 'transaction_class']][df_card['unique_mem_id'] == '70850441974905670928446']
Итерация с кортежами
cumulative_amount = []
amount_list = []
for row in df_1.itertuples():
#access data using column names
if row.transaction_class == "expense":
#print(index, row.unique_mem_id, row.amount, row.transaction_class)
amount_list.append(row.amount)
cumulative_amount = np.cumsum(amount_list, axis = 0)
#print(row.unique_mem_id, cumulative_amount)
else:
#print(f"stopped at user_ID: {row.unique_mem_id}, cumulative sum injected {cumulative_amount[-1]}")
break
#print out the member id as part of the for-loop and and the last element of the list which is the amount to be injected
print(f"unique_member_ID: {row.unique_mem_id}; initial injection needed in USD: {cumulative_amount[-1]}")
Печатает соответствующий member_ID и сумму их расходов. Надеюсь, эти варианты помогут:)