syr*_*rup 3 python numpy pandas
我有一个pandas数据框,其中第一列(CUSTOMER)是客户的名称,客户购买的每件产品(PRODUCT)都重复一次客户名称:
Customer Product Count
John A 1
John B 1
John C 1
Mary A 1
Mary B 1
Charles A 1
Run Code Online (Sandbox Code Playgroud)
我想透过此数据来创建一个新的数据框,其中行和列都是产品类别(PRODUCT),值是客户名称的计数,如下所示:
Product
A B C
A 0 2 1
B 2 0 1
C 1 1 0
Run Code Online (Sandbox Code Playgroud)
因此,如果约翰购买了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'
Run Code Online (Sandbox Code Playgroud)
我应该使用什么方法和参数?
自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
Run Code Online (Sandbox Code Playgroud)
你可以看到这个答案,以便更好地了解如何加快速度crosstab.这个问题的关键见解是自我合并.