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)
您可以检查 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)