【问题标题】:Pandas pivot table with unique totals具有唯一总数的 Pandas 数据透视表
【发布时间】:2017-06-24 00:38:34
【问题描述】:

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

我怎么去那里?

【问题讨论】:

  • 所以您不想要每月的购买次数,您想要在给定月份中至少购买一次的客户数量?
  • 对,比如一月份,如果一个顾客用两张信用卡买了两次,我只想算他一次,因为他只是一个人,我不在乎他有两张信用卡。行的逻辑相同。
  • 那我想你想改变你的 aggfunc....
  • 但是所有的值都可以,我只是想改变总计的逻辑

标签: python pandas


【解决方案1】:

这是我需要的:

func = lambda x: x.nunique()
df = df.pivot_table(index='CATEGORY', columns='MONTH', values='CUST_CODE',  
                    aggfunc=func, margins=True, margins_name='TOTAL')  

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2019-08-15
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2019-04-15
    • 2020-10-17
    相关资源
    最近更新 更多