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

bur*_*cak 3 python merge dataframe pandas

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

 baz   3
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 8

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

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
Run Code Online (Sandbox Code Playgroud)

您还可以根据 Trenton 的评论进行outer合并和检查indicator=True,或者简单地删除lkeywith 的子集:

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