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)进行矩阵乘法。