Groupby id и создание столбца логического столбца - PullRequest
1 голос
/ 06 апреля 2020

У меня есть дата-кадр транзакций:

  id |   type |    date
  453| online | 08-12-19
  453| instore| 08-12-19
  453| return | 10-5-19

Существует 4 возможных типа: онлайн, магазин, возврат, другое. Я хочу создать логические столбцы, в которых я вижу, был ли для каждого уникального клиента данный тип транзакции.

Я пробовал следующий код, но он не давал мне того, что я хотел.

transactions.groupby('id')['type'].transform(lambda x: x == 'online') == 'online' 

1 Ответ

2 голосов
/ 06 апреля 2020

Используйте get_dummies с совокупностью max для столбцов индикатаро по группам и последним добавлением DataFrame.reindex для пользовательского заказа и добавляйте возможные типы ошибок, заполненные 0:

t = ['online', 'instore', 'return', 'other']
df = pd.get_dummies(df['type']).groupby(df['id']).max().reindex(t, axis=1, fill_value=0)
print (df)
     online  instore  return  other
id                                 
453       1        1       1      0

Другая идея с join для групп и Series.str.get_dummies:

t = ['online', 'instore', 'return', 'other']
df.groupby('id')['type'].agg('|'.join).str.get_dummies().reindex(t, axis=1, fill_value=0)
...