Python 计算表中行与行之间的不同列数

Python 计算表中行与行之间的不同列数,python,pandas,vectorization,Python,Pandas,Vectorization,我有一个装满各种数据的熊猫数据框。其中一些是分类数据(作为“对象”类型存储在数据框中) 我想计算其中一行与所有其他行不同的字段(列)数 数据的示例形状(列为名称“i”、“j”、“k”;第一个数字为索引): 我想比较的另一行(索引形式): 我想要的结果是: [1,1,2,0] 因为0和1在“k”处不同,0和2在“j”处不同,0和3在“i”和“j”处不同,0和4一点也不不同 我会经常这样做,所以我需要一个快速版本。我已经有一个通过循环来实现,但是速度很慢;我需要一些更快的东西,所以我正试图想出一个

我有一个装满各种数据的熊猫数据框。其中一些是分类数据(作为“对象”类型存储在数据框中)

我想计算其中一行与所有其他行不同的字段(列)数

数据的示例形状(列为名称“i”、“j”、“k”;第一个数字为索引):

我想比较的另一行(索引形式):

我想要的结果是:

[1,1,2,0]
因为0和1在“k”处不同,0和2在“j”处不同,0和3在“i”和“j”处不同,0和4一点也不不同

我会经常这样做,所以我需要一个快速版本。我已经有一个通过循环来实现,但是速度很慢;我需要一些更快的东西,所以我正试图想出一个矢量化的版本


请注意,数据框将包含其他列(数字);提供的数据没有提到它们,但您可以假设还有其他一些列(例如,包含int64的“h”)。我们希望忽略这些列。

广播、比较并总结结果:

diff = (df != np.array(['a', 'b', 'f'])).sum(1).tolist()

print(diff)
[1, 1, 2, 0]
如果数据位于单行数据框
s
,则解决方案如下所示:

df.ne(s.iloc[0].values, axis=1).sum(1).tolist()

广播、比较和总结结果:

diff = (df != np.array(['a', 'b', 'f'])).sum(1).tolist()

print(diff)
[1, 1, 2, 0]
如果数据位于单行数据框
s
,则解决方案如下所示:

df.ne(s.iloc[0].values, axis=1).sum(1).tolist()

我不知道这个问题+1用于匹配输出(-:回答正确的人,也许你可以添加
df.ne(s.iloc[0],axis=1)。sum(1)
太好了!这使我获得了所需的速度。非常感谢。这个问题我不知道了。+1用于匹配输出(-:回答正确的人,也许你可以添加
df.ne(s.iloc[0],axis=1)。sum(1)
太棒了!这让我获得了所需的加速。非常感谢。