В проблеме у нас есть следующие данные:
Код: Выделить всё
data = [[1, 23], [2, 9], [4, 30], [5, 54], [6, 96], [7, 54], [8, 54]]
visits = pd.DataFrame(data, columns=['visit_id', 'customer_id']).astype({'visit_id':'Int64', 'customer_id':'Int64'})
data = [[2, 5, 310], [3, 5, 300], [9, 5, 200], [12, 1, 910], [13, 2, 970]]
transactions = pd.DataFrame(data, columns=['transaction_id', 'visit_id', 'amount']).astype({'transaction_id':'Int64', 'visit_id':'Int64', 'amount':'Int64'})
< /code>
Отпечатано, данные: < /p>
Visits
+----------+-------------+
| visit_id | customer_id |
+----------+-------------+
| 1 | 23 |
| 2 | 9 |
| 4 | 30 |
| 5 | 54 |
| 6 | 96 |
| 7 | 54 |
| 8 | 54 |
+----------+-------------+
Transactions
+----------------+----------+--------+
| transaction_id | visit_id | amount |
+----------------+----------+--------+
| 2 | 5 | 310 |
| 3 | 5 | 300 |
| 9 | 5 | 200 |
| 12 | 1 | 910 |
| 13 | 2 | 970 |
+----------------+----------+--------+
Код: Выделить всё
+-------------+----------------+
| customer_id | count_no_trans |
+-------------+----------------+
| 54 | 2 |
| 30 | 1 |
| 96 | 1 |
+-------------+----------------+
[*] Удалить строки с дубликатом vitive_id из транзакций
[*] Посещение левого слияния с транзакциями at visit_id
null null null null null
[*] null null
< /ol>
Для шагов 1 и 2 я делаю следующее: < /p>
Код: Выделить всё
df = pd.merge(left=visits,
right = transactions.drop_duplicates(subset = ['visit_id']),
how = 'left',
on = 'visit_id')
< /code>
Для шага 3 это работает с функцией пользовательской агрегации: < /p>
df1 = (df[df['transaction_id'].isna()]
.groupby('customer_id', as_index = False)['transaction_id']
.agg(lambda x: x.isna().sum())).rename(columns = {'transaction_id':'count_no_trans'})
Код: Выделить всё
df2 = (df[df['transaction_id'].isna()]
.groupby('customer_id', as_index = False)['transaction_id']
.isna().sum().rename(columns = {'transaction_id':'count_no_trans'}))
< /code>
Я получаю ошибку: < /p>
AttributeError: 'SeriesGroupBy' object has no attribute 'isna'
Почему это происходит?
Подробнее здесь: https://stackoverflow.com/questions/795 ... oesnt-work