Python 系列中的布尔数据帧,其自身位于Pandas中

Python 系列中的布尔数据帧,其自身位于Pandas中,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个Pandas数据框,其中类别信息存储在一列中,如下所示(只有2个类别,但有许多项): 我想创建一个掩码数据框,但我不想使用类别名称,而是希望将每个项同时作为行和列。对于同一类别中的项目,条目将为1,否则为0: | item | water | pasta | burger | pepsi | chocolate | |-----------|-------|-------|--------|-------|-----------| | water | 1 | 0

我有一个Pandas数据框,其中类别信息存储在一列中,如下所示(只有2个类别,但有许多项):

我想创建一个掩码数据框,但我不想使用类别名称,而是希望将每个项同时作为行和列。对于同一类别中的项目,条目将为1,否则为0:

| item      | water | pasta | burger | pepsi | chocolate |
|-----------|-------|-------|--------|-------|-----------|
| water     | 1     | 0     | 0      | 1     | 0         |
| pasta     | 0     | 1     | 1      | 0     | 1         |
| burger    | 0     | 1     | 1      | 0     | 1         |
| pepsi     | 1     | 0     | 0      | 1     | 0         |
| chocolate | 0     | 1     | 1      | 0     | 1         |

在熊猫身上最有效的方法是什么?我不知道是否有快速的方法,因为在我能找到的所有文档示例中,布尔掩码使用类别名称作为列标题(而不是将项目本身作为列和行)。

我的评论不正确,这需要一些预处理

首先,对类别进行合并:

df1 = df.merge(df, on='category')
pd.交叉表

pd.crosstab(df1.item_x, df1.item_y)

item_y     burger  chocolate  pasta  pepsi  water
item_x
burger          1          1      1      0      0
chocolate       1          1      1      0      0
pasta           1          1      1      0      0
pepsi           0          0      0      1      1
water           0          0      0      1      1

@用户3483203,这样我就可以调用get_dummies,它将生成一个包含两个类别作为列的表。然后做a.multiply(a.T)+b.multiply(b.T),我相信这是可行的。不过,这似乎需要很多步骤(也许不是)。谢谢,我确信有一种方法可以使用一些重塑方法的组合,但我无法找到正确的方法。这很有效:)
pd.crosstab(df1.item_x, df1.item_y)

item_y     burger  chocolate  pasta  pepsi  water
item_x
burger          1          1      1      0      0
chocolate       1          1      1      0      0
pasta           1          1      1      0      0
pepsi           0          0      0      1      1
water           0          0      0      1      1