Подсчет количества нулевых значений в группе - почему встроенный метод не работает?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Подсчет количества нулевых значений в группе - почему встроенный метод не работает?

Сообщение Anonymous »

Я выполняю следующую проблему LeetCode и экспериментирую с различными решениями: https://leetcode.com/problems/customer- ... scription/
В проблеме у нас есть следующие данные:

Код: Выделить всё

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    |
+----------------+----------+--------+
Проблема запрашивает DataFrame, где для каждого Customer_id количество посещений без транзакций записывается (если это ненулевое). Таким образом, с предыдущими данными выборки мы ожидаем следующего вывода: < /p>

Код: Выделить всё

+-------------+----------------+
| 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'})
Но если я просто попытаюсь использовать встроенные методы .ISNA (). sum () , это не работает:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»