У меня есть таблица с категорией покупателя покупателя
Я пытаюсь создать матрицу перекрестных продаж, в которой учитывается количество уникальных покупателей для каждой пары категорий продуктов, а также общее количество с уникальным количеством.
pandas.crosstab
- хороший способ начать, но он не дает промежуточных итогов (т. Е. margins=True
)
df = pd.DataFrame({
'cust': ['1', '1', '2', '3', '3', '4', '5'], # customer ID
'categ': ['a', 'b', 'a', 'a', 'b', 'b', 'b'] # category ID
})
# have 2 columns to make the crosstab
dd = pd.merge(df, df, on='cust')
Тогда pd.crosstab(dd.categ_x, dd.categ_y, margins=True)
дает:
| categ_x | a | b | All |
|---------|---|---|-----|
| a | 3 | 2 | 5 |
| b | 2 | 4 | 6 |
| All | 5 | 6 | 11 |
pd.merge
помогает заполнить ячейки правильными цифрами в перекрестной таблице, но приводит к неправильному подсчету промежуточных итогов / полей
Что бы я ожидал, это:
| categ_x | a | b | All |
|---------|---|---|-----|
| a | 3 | 2 | 3 | -- I have 3 unique clients with 'a'
| b | 2 | 4 | 4 | -- I have 4 unique clients with 'b'
| All | 3 | 4 | 5 | -- I have 5 unique clients in total
Я попробовал подсчитать, уникальные ... пока без особого успеха.
EDIT
jezrael ответ в порядке, но мне было интересно, был ли способ сделать это напрямую через crosstab
, используя право aggfunc
.