Как сгруппировать и рассчитать в pandas - PullRequest
1 голос
/ 19 февраля 2020

У меня есть df, как показано ниже

customer class  score
A          a      10
A          b      20
B          a      40
B          b      50

Я бы хотел сгруппировать, преобразовать и рассчитать вот так.

customer  score(b-a)
A           10
B           10

Я не могу понять, как рассчитать ..

df.groupby(df.customer)

Если кто-то испытал такую ​​агрегацию, пожалуйста, дайте мне знать.

Спасибо

Ответы [ 2 ]

4 голосов
/ 19 февраля 2020

Вы можете использовать комментарий @ HenryYik или pivot:

(df.pivot(index='customer', columns='class', values='score')
   .assign(score=lambda x: x['b']-x['a'])
)

Вывод:

class      a   b  score
customer               
A         10  20     10
B         40  50     10
1 голос
/ 19 февраля 2020

Альтернативное решение, сгруппируйте по клиенту и примените пользовательскую функцию

def get_score(temp):
    map_score = dict(zip(temp['class'], temp['score'])) # mapping of class and score for each customer
    return map_score['b'] - map_score['a']
df.groupby("customer").apply(get_score)

Это приведет к ожидаемому ответу.

...