我正在尝试使用pandas在python中建立列联表。这是我的数据,看起来像是熊猫数据框
InvoiceNo Item Quantity
123 a 1
123 b 2
123 c 1
124 a 1
124 d 3
125 c 1
125 b 2
因此,我需要建立一个表格,在这里我可以轻松地选择一起购买的东西,如下所示
一起购买的物品:
a b c d
a 2 1 1 1
b 1 2 2 0
c 1 2 2 0
d 1 0 0 1
在这里,对角线元素代表所有发票中物料的频率。
如何有效地构建此结构?
答案 0 :(得分:1)
使用DataFrame.merge
与crosstab
进行交叉联接,并清理索引和列名DataFrame.rename_axis
:
df = df.merge(df, on='InvoiceNo')
df = pd.crosstab(df['Item_x'], df['Item_y']).rename_axis(None).rename_axis(None, axis=1)
print (df)
a b c d
a 2 1 1 1
b 1 2 2 0
c 1 2 2 0
d 1 0 0 1