Python Pandas Merge --- 哪些行没有合并?

标签 python pandas dataframe merge

<分区>

可能有以前的问题,但当你搜索它们时,它们不会出现。 这个问题及其标题非常有用。

import pandas as pd

df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz'], 'x1': [1, 2, 3], 'x2': [11, 22, 33]})
                    
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'bazz'], 'y1': [1, 2, 3], 'y2': [111, 222, 333]})

merged_df = pd.merge(df1, df2, how= 'inner', left_on=['lkey','x1'], right_on=['rkey','y1'])

merged_df

如何显示df1的哪些行没有合并?

列出带有“lkey”和“x1”列的 df1 的未合并行将非常有帮助。

 baz   3

最佳答案

您可以检查 df .isin merged_df 数据帧,然后使用 ~ 作为 bool 系列传递以返回被合并的行未合并:

import pandas as pd
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz'], 'x1': [1, 2, 3], 'x2': [11, 22, 33]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'bazz'], 'y1': [1, 2, 3], 'y2': [111, 222, 333]})
merged_df = pd.merge(df1, df2, how= 'inner', left_on=['lkey','x1'], right_on=['rkey','y1'])
df1[~df1.isin(merged_df)].dropna()
Out[1]: 
  lkey   x1    x2
2  baz  3.0  33.0

您还可以根据 Trenton 的评论进行 outer 合并并使用 indicator=True 进行检查,或者简单地在 lkey 的子集上使用:

merged_df = pd.merge(df1, df2, how= 'outer', left_on=['lkey','x1'], right_on=['rkey','y1']).dropna(subset=['lkey'])

关于Python Pandas Merge --- 哪些行没有合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64407796/

相关文章:

python - Pandas 获得连续的行

python Pandas : How to combine or merge two difrent size dataframes based on dates

python - OpenCV 3.4.1错误readNetFromTensorflow无法在cv::dnn::ReadProtoFromBinaryFile中打开.pb

python - 无法使用 Scrapy 从父节点和子节点/标签获取文本

python - 了解此 Pandas 脚本

python - pandas 基于索引 vs ix 丢弃行

python - 计算 Python 列表中真正 boolean 值的数量

python - 使用 groupby 填充 Pandas

python - 在 Pandas 中读取 csv 文件时出现 UnicodeDecodeError : 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte,

Python 删除包含大量缺失值的列