我有一个pandas数据框,其中第一列(CUSTOMER)是客户的名称,客户购买的每件产品(PRODUCT)都会重复一次客户名称:
Customer Product Count
John A 1
John B 1
John C 1
Mary A 1
Mary B 1
Charles A 1
我想透过此数据来创建一个新的数据框,其中行和列都是产品类别(PRODUCT),值是客户名称的计数,如下所示:
Product
A B C
A 0 2 1
B 2 0 1
C 1 1 0
因此,如果约翰买了A并且还买了B,+1会加到A:B小区,他也买了A和C一起,所以A:C小区有+1,依此类推。请注意,Charles并未出现在此数据框中,因为他只购买了一种产品。
我尝试使用pandas.pivot_table,但这就是我得到的:
df = pd.pivot_table(df, index=['Product'], columns=['Product'], values=['Customer'])
>> KeyError: 'Level Product not found'
我应该使用哪种方法和参数?
答案 0 :(得分:6)
自merge
个crosstab
d1 = df.merge(df, on='Customer').query('Product_x != Product_y')
pd.crosstab(d1.Product_x, d1.Product_y)
Product_y A B C
Product_x
A 0 2 1
B 2 0 1
C 1 1 0
您可以看到this answer以更好地了解如何加快crosstab
的速度。这个问题的关键见解是自我合并。