Мне нужно сгруппировать и получить звание в Python - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть фрейм данных, см. Код ниже, чтобы сгенерировать его:

     df = pd.DataFrame({'customer': [1,2,1,3,1,2,3], 
               "group_code": ['111', '111', '222', '111', '111', '111', '333'],
              "ind_code": ['A', 'B', 'AA', 'A', 'AAA', 'C', 'BBB'],
              "amount": [100, 200, 140, 400, 225, 125, 600],
              "card": ['XXX', 'YYY', 'YYY', 'XXX', 'XXX', 'YYY', 'XXX']})

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

Пожалуйста, помогите как можно скорее.

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете сделать:

import pandas as pd

df = pd.DataFrame({'customer': [1,2,1,3,1,2,3],
               "group_code": ['111', '111', '222', '111', '111', '111', '333'],
              "ind_code": ['A', 'B', 'AA', 'A', 'AAA', 'C', 'BBB'],
              "amount": [100, 200, 140, 400, 225, 125, 600],
              "card": ['XXX', 'YYY', 'YYY', 'XXX', 'XXX', 'YYY', 'XXX']})
mask = df.groupby('card')['amount'].transform(max) == df['amount']

result = df[mask][['card', 'group_code', 'amount']]

print(result)

Вывод

  card group_code  amount
1  YYY        111     200
6  XXX        333     600

ОБНОВЛЕНИЕ

import pandas as pd

df = pd.DataFrame({'customer': [1,2,1,3,1,2,3],
               "group_code": ['111', '111', '222', '111', '111', '111', '333'],
              "ind_code": ['A', 'B', 'AA', 'A', 'AAA', 'C', 'BBB'],
              "amount": [100, 200, 140, 400, 225, 125, 600],
              "card": ['XXX', 'YYY', 'YYY', 'XXX', 'XXX', 'YYY', 'XXX']})
agg = df.groupby(['card', 'group_code']).agg({'amount':'sum'}).reset_index()
mask = agg.groupby('card')['amount'].transform(max) == agg['amount']
result = agg[mask]
print(result)

Вывод

  card group_code  amount
0  XXX        111     725
2  YYY        111     325
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...