Pandas透视表具有唯一的总计

时间:2017-06-24 00:38:35

标签: python pandas

我有这个交易数据框,每个交易都有一个客户,有一张信用卡,每个客户最多可以有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

我如何到达那里?

1 个答案:

答案 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')