Подсчитать количество покупок, совершенных пользователем на pandas кадре данных - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть pandas фрейм данных с обоими заказами и простым доступом к файлу книги, я хочу получить отдельный фрейм данных, где я могу видеть, какие заказы делают каждый пользователь, и отменить доступ.

Это пример формата моего фрейма данных:

    number  type   username   product   order_code  order_datetime    model    price
0     1     order   alicia7    130365       ...        ...            ebook     5.99
1     1     order   alicia7    130365       ...        ...            ebook     5.99
2     4    access   7762hc      65487       ...        ...           printed   15.45
3     3    access   kylemm      45878       ...        ...            ebook     7.99
4     1     order   john5       32054       ...        ...           printed   18.99

Число просто указывает количество обращений пользователя к файлу книги. Итак, результат, которого я пытаюсь достичь, - это новый фрейм данных, в котором у меня есть каждый заказ, сделанный пользователем, и было бы еще лучше, если бы я мог просто сгруппировать покупки, сделанные пользователем из той же книги, например добавить новый столбец с общим количеством той же книги, которую купил пользователь. Примерно так:

     type   username   product   count  
0   order   alicia7    130365      2       
4   order   john5       32054      1     

Возможно ли это вообще?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Если я правильно вас понял, ваш код должен выглядеть примерно так:

df_gb = df.groupby(['type','username','product'],as_index=False).agg({'model':'count'}).rename(columns ={'model':'count'})
orders_filtered_df = df_gb[df_gb.type=='order']
0 голосов
/ 11 февраля 2020

Отфильтруйте значения по boolean indexing, а затем посчитайте по GroupBy.size:

print (df[df['type'].eq('order')])
   number   type username  product    model  price
0       1  order  alicia7   130365    ebook   5.99
1       1  order  alicia7   130365    ebook   5.99
4       1  order    john5    32054  printed  18.99

df1 = df[df['type'].eq('order')].groupby(['type','username','product']).size().reset_index(name='count')

Или отфильтруйте по DataFrame.query :

df1 = df.query('type=="order"').groupby(['type','username','product']).size().reset_index(name='count')

print (df1)
    type username  product  count
0  order  alicia7   130365      2
1  order    john5    32054      1

Для всех возможных комбинаций без использования фильтра:

df2 = df.groupby(['type','username','product']).size().reset_index(name='count')
print (df2)
     type username  product  count
0  access   7762hc    65487      1
1  access   kylemm    45878      1
2   order  alicia7   130365      2
3   order    john5    32054      1
...