Как агрегировать и группировать в pandas - PullRequest
0 голосов
/ 07 августа 2020

У меня следующий df, я хотел бы сгруппировать по customer, а затем count и sum

одновременно, я sh добавляю условную группировку.

есть ли способ достичь этого?

customer  product score
A          a       1
A          b       2
A          c       3
B          a       4
B          a       5
B          b       6

Мой желаемый результат следующий

customer count sum count(product =a)  sum(product=a)
A          3    6     1                   1
B          3   15     2                   9

Моя работа такая ..

grouped=df.groupby('customer')

grouped.agg({"product":"count","score":"sum"})

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 августа 2020
import pandas as pd

df = pd.DataFrame({'customer': ['A', 'A', 'A', 'B', 'B', 'B'], 'product': ['a', 'b', 'c', 'a', 'a', 'b'], 'score':[1, 2, 3, 4, 5, 6]})
df = df[df['product']=='a']
grouped=df.groupby('customer')
grouped = grouped.agg({"product":"count","score":"sum"}).reset_index()
print(grouped)

Вывод:

  customer  product  score
0        A        1      1
1        B        2      9

Затем объедините этот фрейм данных с нефильтрованным сгруппированным фреймом данных

0 голосов
/ 07 августа 2020

Попробуем crosstab

s = pd.crosstab(df['customer'],df['product'], df['score'],margins=True, aggfunc=['sum','count']).drop('All')
Out[76]: 
          sum               count              
product     a    b    c All     a    b    c All
customer                                       
A         1.0  2.0  3.0   6   1.0  1.0  1.0   3
B         9.0  6.0  NaN  15   2.0  1.0  NaN   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...