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

标签 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)。我们想忽略这些列。

最佳答案

广播、比较、总结结果:

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()

关于python - 计算 Pandas 中行之间不同列的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802421/

相关文章:

python - 从 pandas 数据框中的字符串中提取信息非常困难

python - 如何在 python 中删除 groupby 之后的行?

fortran - 可分配的函数参数和自动矢量化

python - 如何在Python中转换为UTC后完全删除tzinfo?

Python3 - 什么时候你需要在类方法中的变量声明前添加 "self._"?

python - 如何使用 pip 正确安装软件包而不收到语法错误?

pandas - 根据另一个数据框中的日期条件创建新列

python - Pandas:使用其他列子组中的值创建新列

python - numpy向量化函数以接受不同长度的向量并返回张量结果

python - 用随机数替换条件下的numpy数组值