python - Pandas :如何将列表转换为按列分组的矩阵?

标签 python pandas numpy

我有一个 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'

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

最佳答案

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

可以看到this answer更好地了解如何加快 crosstab 的速度。这个问题的关键见解是自合并。

关于python - Pandas :如何将列表转换为按列分组的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419529/

相关文章:

python - 多实例Django论坛软件

Python Pandas - 非连续时间序列?

python - 如何将 Dask.DataFrame 转换为 pd.DataFrame?

python - numpy 向量化多维函数

python - 添加两个带有 2D 掩码的 3D numpy 数组

Python:如何让 Gtk.scrolledwindow 滚动到 Gtk.Treeview 中的选择

python - 在 scikit-learn 中查找和利用来自 PCA 的特征值和特征向量

python - 如何对tf.nn.embedding_lookup进行逆向操作?

python - Pandas:DataFrame describe返回的count是 float 的情况有哪些

python - 如何向量化Python for循环来修改数据帧的每个元素?