python-3.x - 两个数据帧中每个值的布尔比较
问题描述
我有两个具有相同列但可能不同行的数据框(从 csvs 读取)。我正在尝试生成第三个数据框,该数据框的左侧有索引,并且对于给定索引记录匹配的每一列都有一个 TRUE 或 FALSE 值。这是一个简单的例子
df1 = pd.DataFrame(np.array([
['100', 'a', 1, 'aa'],
['101', 'b', 2, 'bb'],
['102', 'c', 3, 'cc']]),
columns=['ID', 'Col1', 'Col2', 'Col3']).set_index('ID')
df2 = pd.DataFrame(np.array([
['100', 'a', 1, 'aa'],
['101', 'b', 2, 'bb'],
['102', 'c', 3, 'cb']]),
columns=['ID', 'Col1', 'Col2', 'Col3']).set_index('ID')
df3 = pd.DataFrame(np.where(df1==df2,True,False),
columns=df1.columns,
index=df1.index)
print(df3)
这会产生:
ID
100 True True True
101 True True True
102 True True False
我遇到的问题是记录的数量会有所不同并且可能出现故障。df1 中可能存在 ID 为 104 的行,而 df2 中可能存在 ID 为 105 的行。这会导致抛出“只能比较标记相同的 DataFrame 对象”错误。
我在想 np.where 不够灵活?任何建议将不胜感激!
解决方案
在这种情况下,您可能需要使用eq
:
df1.eq(df2)
Col1 Col2 Col3
ID
100 True True True
101 True True True
102 False False False
105 False False False
推荐阅读
- javascript - 如何在外部 npm 包中使用 React 的 Link 组件而不会出现错误:不变的“你不应该在路由器外部使用链接”
- postgresql - PostgreSQL 9.4.1 中的切换和切回
- javascript - 如何正确包含外部 JavaScript 库,以便其类在 VueJs 组件中可用?
- javascript - 用于生成文本框并将输入的数据显示为 csv 的 Jquery 代码
- excel - 启用文本框的动态复选框
- python - 序列没有从备份文件中恢复
- java - JavaFX 仍然是在 Java 中创建 GUI 应用程序的更好选择吗?
- php - Wordpress - 基于 IP 地址的重定向
- c++ - 如何在 Notepad++ 和 cmd 中使用文件流打开文件?C++
- python - 美丽的汤 CSS 选择器没有找到任何东西