Как мне сгруппировать по двум столбцам, а затем подсчитать вхождения каждого уникального значения в третьем столбце для каждой из группировок?

#python #pandas #dataframe #pandas-groupby

Вопрос:

У меня есть уникальный идентификатор, который я хочу сгруппировать по [«EMID»] вместе со столбцом даты [«DateNew»]. Затем я хотел бы подсчитать, сколько раз каждое значение в BRalpha встречается для каждой группы.

Набор данных:

ЭМИД Дата новая БРальфа
SIM10001 2016-06-01 ПОЯСНИЦА
SIM10001 2016-06-01 ПОЯСНИЦА
SIM10001 2016-07-01 ПОЯСНИЦА
SIM10001 2016-07-01 Тор
SIM10002 2016-02-01 NSPC
SIM10002 2016-02-01 NSPC
SIM10002 2016-02-01 NSPC
SIM10002 2016-02-01 NSPC
SIM10002 2016-02-01 NSPC
SIM10003 2017-03-01 ANFT
SIM10003 2017-03-01 ANFT

Желаемый результат:

ЭМИД Дата новая Count_LUMB Count_THOR Count_NSPC Count_ANFT
SIM10001 2016-06-01 2 0 0 0
SIM10001 2016-07-01 1 1 0 0
SIM10002 2016-02-01 0 0 5 0
SIM10003 2017-03-01 0 0 0 2

Ответ №1:

 print(
    df.groupby(["EMID", "DateNew", "BRalpha"])
    .size()
    .unstack()
    .fillna(0)
    .astype(int)
    .add_prefix("count_")
    .reset_index()
)
 

С принтами:

 BRalpha      EMID     DateNew  count_ANFT  count_LUMB  count_NSPC  count_THOR
0        SIM10001  2016-06-01           0           2           0           0
1        SIM10001  2016-07-01           0           1           0           1
2        SIM10002  2016-02-01           0           0           5           0
3        SIM10003  2017-03-01           2           0           0           0