如何计算列

时间:2018-06-06 21:28:57

标签: python pandas count duplicates overlap

请让我问一个关于熊猫数据帧的问题。 例如,我有一个像这样的数据框。

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。预期的输出就像这个面板。

enter image description here

谢谢。

1 个答案:

答案 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