熊猫:如何将列表转换为按列分组的矩阵?

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)

我应该使用什么方法和参数?

piR*_*red 6

mergecrosstab

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.这个问题的关键见解是自我合并.