python - 计算 Pandas 中行之间的不同列数
问题描述
我有一个充满各种数据的 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]
如果您的数据在单行 DataFrames
中,那么您的解决方案将如下所示:
df.ne(s.iloc[0].values, axis=1).sum(1).tolist()
推荐阅读
- c++ - 使用 WinInet 的客户端身份验证(证书 + 私钥)
- android - 将 String 转换为 int 时应用程序崩溃
- uipath - 在 Google 云端硬盘和工作表中自动搜索
- python - 如何在 Google App Store Cloud Shell 中配置 pycodestyle
- python - How to get just summary line from python docstring?
- google-apps-script - 如何在 Google Apps 脚本中设置计时器?
- scrapy - 刮痧和尊重robots.txt
- python - 如何使用熊猫根据行值条件更改列数据类型
- java - 我们可以在 selenium webdriver 中使用 for 循环的场景有哪些?
- mule - 从存储库打开并处理 Mulesoft 项目