我有这个交易数据框,每个交易都有一个客户,有一张信用卡,每个客户最多可以有3张信用卡(铜牌,银牌和金币),有些客户在同一个月有不同的信用卡和其他客户在不同月份使用相同的信用卡购买。
CUST_CODE CATEGORY MONTH PURCHASED
4111 BRONZE JAN 1
6326 SILVER FEB 1
4666 GOLD JAN 1
8062 BRONZE JAN 1
FEB 1
SILVER JAN 1
FEB 1
9393 BRONZE JAN 1
1021 SILVER FEB 1
JAN 1
9244 BRONZE JAN 1
7963 SILVER FEB 1
GOLD JAN 1
FEB 1
2962 BRONZE JAN 1
2893 SILVER FEB 1
我想创建一个数据透视表,但我需要总行数来计算客户一次(即使他有几张卡),同时,总列数应该只计算一次客户(甚至如果顾客已经购买了几个月)
这是一个常规的数据透视表:
df = df.pivot_table(index='CATEGORY', columns='MONTH', values='CUST_CODE',
aggfunc='count', margins=True, margins_name='TOTAL')
CATEGORY JAN FEB Grand Total
BRONZE 5 1 6
GOLD 2 1 3
SILVER 2 5 7
TOTAL 9 7 16
但这是我真正想要的输出,请注意,行和列的总数等于唯一客户的总数(10):
CATEGORY JAN FEB Grand Total
BRONZE 5 1 5
GOLD 2 1 1
SILVER 2 5 4
TOTAL 6 4 10
我如何到达那里?
答案 0 :(得分:0)
这就是我需要的:
func = lambda x: x.nunique()
df = df.pivot_table(index='CATEGORY', columns='MONTH', values='CUST_CODE',
aggfunc=func, margins=True, margins_name='TOTAL')