Python 如何计算列之间的重叠值

Python 如何计算列之间的重叠值,python,pandas,count,duplicates,overlap,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”,所以有一个重叠 有些动物在自己

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

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”,所以有一个重叠

有些动物在自己的列中有重复项。 例如,狗有一个重复的“aa”。 所以我想先去除动物体内的重复,然后分析动物体内重复的数量

如果你能告诉我你的想法,我将非常感激

p.S.预期输出与此面板类似


谢谢。

这里有一种方法。主要的挑战是获得动物和特征的交叉表。然后,通过矩阵乘法得到共生矩阵

请注意,对角线上的数字反映了每种动物独特特征的数量,这与您的示例不同

# 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

你能发布预期的输出吗?是的。我想要一个矩阵数据帧。如果某个内容在三列之间共享,那么会有多少重叠?Harv Ipan要求的是预期的输出,而不是输出的描述。我不知道如何写入输出,但预期的输出与下一个注释类似。TypeError:不支持的操作数类型对于@:'DataFrame'和'DataFrame',您的
pandas
版本是什么?它适用于熊猫
0.23.0
;在任何情况下,都可以使用
res=pd.DataFrame(df3.values@df3.T.values,index=df3.index,columns=df3.index)进行矩阵乘法。