请让我问一个关于熊猫数据帧的问题。 例如,我有一个像这样的数据框。
df = pd.DataFrame({'Dog': ['aa','bb','cc','dd','aa','ff'], 'Cat':['dd','ee','dd','as','ae','ee'], 'Bird':['ff','cd','ee','def','ae','as']})
df
每列代表动物的信息。 我想知道动物之间存在多少重叠。 例如,狗和猫分享" dd",所以一个重叠。 狗和鸟分享" ff",所以重叠。
有些动物在自己的专栏中有重复。 例如,Dog有副本为" aa"。 所以我想首先删除动物中的重复项,然后分析动物中重复项的数量。
如果你能给我你的想法,我会非常感激。
P.S。预期的输出就像这个面板。
谢谢。
答案 0 :(得分:0)
这是一种方法。主要挑战是获得动物和特征的交叉制表。之后,通过矩阵乘法获得共生矩阵。
请注意,对角线上的数字反映了每只动物的独特特征数量,这与您的示例不同。
# get rid of duplicates and align animal names with features
df2 = df.stack().reset_index(1).drop_duplicates()
# get a crosstabulation
df3 = pd.crosstab(df2.iloc[:, 1], df2.iloc[:, 0])
# coocurrence matrix is obtained with matrix multiplication
res = df3.T @ df3
# level_1 Bird Cat Dog
# level_1
# Bird 6 3 1
# Cat 3 4 1
# Dog 1 1 5