计算Pandas中行之间不同列的数量

时间:2018-06-11 16:38:43

标签: python pandas vectorization

我有一个充满各种数据的Pandas DataFrame。其中一些是分类数据(存储在DataFrame中作为'对象'类型)。

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

数据的示例形状(列名为'i','j','k';第一个数字是索引):

  i  j  k 
1 a  b  c
2 a  d  f
3 b  d  f
4 a  b  f

我要与之比较的额外行(索引形式):

0 a b f

我正在寻找的结果是:

[1,1,2,0]

因为0和1在'k'不同,0和2在'j'不同,0和3在'i'和'j'不同,0和4完全没有区别。

我会经常这样做,所以我需要一个快速版本。我已经有一个通过循环来完成它,但这很慢;我需要更快的东西,所以我想提出一个矢量化的版本。

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

1 个答案:

答案 0 :(得分:4)

广播,比较和总结结果:

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

print(diff)
[1, 1, 2, 0]

如果您的数据位于单行DataFrame s中,那么您的解决方案将如下所示:

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