Вот один из способов использования groupby
+ : вы получаете счет бесплатно:res = pd.get_dummies(df[['customerID', 'item_tag']], columns=['item_tag']) .groupby(['customerID'], as_index=False).sum() print(res) customerID item_tag_A item_tag_B item_tag_D item_tag_F 0 23 2 0 0 0 1 55 0 1 1 1
L = ['A', 'B', 'D']
df_filtered = df.loc[df['item_tag'].isin(L), ['customerID', 'item_tag']]
res = pd.get_dummies(df_filtered, columns=['item_tag'])
.groupby(['customerID']).any().astype(int).reset_index()
res['total_count'] = res.iloc[:, 1:].sum(axis=1)
print(res)
customerID item_tag_A item_tag_B item_tag_D total_count
0 23 1 0 0 1
1 55 0 1 1 2
Есть несколько дополнительных шагов, если вы хотите получить двоичный результат и ограничить определенные теги:
wanted = df[df['item_tag'].isin(my_list)]
wanted.groupby(['customerID', 'item_tag'])
.count().unstack()['Amount'].fillna(0).astype(int)
#item_tag A B D
#customerID
#23 2 0 0
#55 0 1 1