2017-06-24 8 views
0

私はこのトランザクションのデータフレームを持っています。各取引にはクレジットカードがあり、各顧客は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

ですから、数または月ごとの購入を望んでいない、あなたは、与えられた月内の少なくとも1つの購入に顧客の数をしたいですか? – jknupp

+0

たとえば、Janの場合、顧客が2枚のクレジットカードで2回購入した場合、彼は1人だけのため合計で1回カウントします。クレジットカードが2枚あるかどうかは気にしません。行に対しても同じロジックです。 – syrup

+0

あなたはあなたのaggfuncを変更したいと思っています.... – jknupp

答えて

0

これは私が必要なものである:

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