вопрос по pandas, отфильтровать датафрейм

Zaoza14

Новичок
Пользователь
Авг 28, 2020
6
0
1
Добрый день.
Py версия 3.8
Вводные данные: есть датафрейм (для примера, в реальном операций больше)
Python:
import pandas as pd

df = pd.DataFrame({'id': ['1', '2', '3', '4', '5', '6', '7', '8'], 'datetime': ['24.06.2013 00:13:49', '24.06.2013 00:14:27', '24.06.2013 00:17:45', '24.06.2013 00:21:54', '24.06.2013 00:41:49', '24.06.2013 00:42:05', '24.06.2013 00:45:14', '24.06.2013 00:49:04'], 'card_num': ['10', '10', '10', '10','27', '34', '7', '3'], 'type': ['Выдача', 'Выдача', 'Выдача', 'Выдача', 'Пополнение', 'Оплата', 'Оплата', 'Выдача'], 'result': ['Отказ', 'Отказ', 'Отказ', 'Успешно', 'Успешно', 'Отказ', 'Успешно','Успешно'], 'summ': [10000, 8000, 4000, 3500, 2347, 124125, 105, 999]})
Требуется найти похожие на мошеннические операции, критерии такие:
- операции в промежутке 20 минут
- операции на снятие либо оплату
- операций > 3
- первые три или более операции со статусом 'отказ', четвертая или более операция со статусом 'успешно'
- каждая операция по сумме меньше предыдущей

Пока что сделал следующее:
Python:
df_report = df[(df.type != 'Пополнение') & (df.result == 'Успешно')]
# оставить те строки, где тип не равен пополнение и результат равен успешно
card = df_report.card_num
# получаем массив этих номеров карт
suspicious = df[df.card_num.isin(card)]
# применяем фильтр к основному датафрейму по условию, что карты основного дф содержатся в отфильтрованных картах
Тем самым получил список операций, в которых есть карты, по которым есть операции с типами оплата, выдача, и результат успешно.
Далее мне нужно отсеять те карты, где операций по карте < 4, не знаю как это сделать, подскажете?
Далее этот датафрейм нужно будет отфильтровать по столбцу result, что бы остались те карты, где есть и Успешно и Отказ.

Вобщем подскажите хотя бы, как отсеять операции, где меньше 4 транзакций по карте.
 

Форум IT Специалистов