获取 Pandas DataFrame 中的唯一行
给定两个 Pandas 数据帧,通常需要识别仅存在于其中一个数据帧中的行。这可以通过利用合并操作来有效地实现。
例如,考虑以下数据帧:
df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5, 3], 'col2': [10, 11, 12, 13, 14, 10]}) df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})
要从 df1 获取 df2 中不存在的行,我们可以执行df1 和 df2 之间的左连接。为了确保 df1 中的每一行与 df2 中的一行完全匹配,我们需要首先从 df2 中删除重复的行。我们可以使用 drop_duplicates() 函数来做到这一点。
df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
生成的 df_all 数据帧将有一个名为 _merge 的附加列,指示每一行是否来自 df1 和 df2(“两者”),来自仅 df1('left_only'),或仅来自 df2 ('right_only').
col1 col2 _merge 0 1 10 both 1 2 11 both 2 3 12 both 3 4 13 left_only 4 5 14 left_only 5 3 10 left_only
要从 df1 中提取 df2 中不存在的行,我们只需选择 _merge 等于 'left_only' 的行即可:
rows_not_in_df2 = df_all[df_all['_merge'] == 'left_only']
col1 col2 0 4 13 1 5 14 2 3 10
避免错误方法
重要的是要避免无法将行视为一个整体的错误解决方案。一些解决方案仅检查一行中的每个单独值是否存在于另一个数据框中,这可能会导致不正确的结果。
例如,如果我们向 df1 添加了另一行数据 [3, 10],其中也存在于 df2 中,不正确的方法仍会将其识别为不存在于 df2 中,因为它在两列中具有不同的值。但是,我们的方法将正确地将其识别为不存在,因为它已经在 df2 中,并且两列的值相同。
以上是比较两个 DataFrame 时如何有效识别 Pandas DataFrame 中的唯一行?的详细内容。更多信息请关注PHP中文网其他相关文章!