通过使用python中的字段值来计数ID

Ali*_*lan 0 python numpy python-3.x pandas

我有一张桌子

Id  Brand1  Brand2  Brand3  Brand4
0     1       0       0       1
1     1       0       1       0
2     1       0       1       0
3     1       1       0       0
4     1       1       0       1
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用品牌组合创建一个ID数量表。

         Brand1  Brand2  Brand3  Brand4
  Brand1      -       2       2       2
  Brand2      2       -       0       1
  Brand3      2       0       -       0
  Brand4      2       1       0       -
Run Code Online (Sandbox Code Playgroud)

因为它们具有相同的值,所以这也将起作用。

         Brand1  Brand2  Brand3  Brand4
  Brand1      -       2       2       2
  Brand2      -       -       0       1
  Brand3      -       -       -       0
  Brand4      -       -       -       -
Run Code Online (Sandbox Code Playgroud)

jde*_*esa 5

您可以使用简单的矩阵乘积来做到这一点:

import pandas as pd

df = pd.DataFrame({
    'Brand1': [1, 1, 1, 1, 1],
    'Brand2': [0, 0, 0, 1, 1],
    'Brand3': [0, 1, 1, 0, 0],
    'Brand4': [1, 0, 0, 0, 1],
})
cross = df.T @ df
print(cross)
#         Brand1  Brand2  Brand3  Brand4
# Brand1       5       2       2       2
# Brand2       2       2       0       1
# Brand3       2       0       2       0
# Brand4       2       1       0       2
Run Code Online (Sandbox Code Playgroud)