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