我有一个 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'
我应该使用什么方法和参数?
最佳答案
自 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
的速度。这个问题的关键见解是自合并。
关于python - Pandas :如何将列表转换为按列分组的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419529/