pandas 比较两个编号不相等的 Dataframe ,用于使用PYTHON在1个 Dataframe 中查找唯一记录的行

h79rfbju  于 2023-05-05  发布在  Python
关注(0)|答案(3)|浏览(180)

需要构造两个 Dataframe ,其中包含来自2个不同环境的SQL查询输出:DF 1:来自Envl DF 1--〉{11,13,15,17,20} DF 2:来自Env 2 DF 2--〉{11,12,13,15,16,17,20,25}
现在我需要从DF 2中提取值(12,16,25),这样我就可以从DF 2中删除它,并使DF 1和DF 2的大小相等,以便应用“比较”功能。
我试图使用合并,但我得到相同的没有。如果我使用左连接或右连接。
有没有更好的方法来完成这件事?
df_all = df1.merge(df2.drop_duplicates(),on=['PK'],how='left')
如果我做左或右连接,我将得到与df_all中的df 2相同的记录

mrfwxfqh

mrfwxfqh1#

如果我听得懂你的意思那你就想这么做

df1 = pd.DataFrame({'PK': [11, 13, 15, 17, 20]})
df2 = pd.DataFrame({'PK': [11, 12, 13, 15, 16, 17, 20, 25]})
to_remove = set(df2['PK']) - set(df1['PK'])
df_remove = pd.DataFrame({'PK': list(to_remove)})

# Merge df_remove with df2 using an inner join
df2_new = df2.merge(df_remove, on='PK', how='inner')
col17t5w

col17t5w2#

我相信你想要实现的是以下几点:

df1 = pd.DataFrame({'PK': [11, 13, 15, 17, 20]})
df2 = pd.DataFrame({'PK': [11, 12, 13, 15, 16, 17, 20, 25]})
df = df2[df2['PK'].isin(df1['PK'])]

# if you want the opposite then you can do the following:
df = df2[~df2['PK'].isin(df1['PK'])]
slsn1g29

slsn1g293#

我想你在找这样的东西

import pandas as pd
# creating the dataframes:

df1 = pd.DataFrame({'ENV1': [11,13,15,17,20]})
df2 = pd.DataFrame({'ENV2': [11,12,13,15,16,17,20,25]})


df3 = (df1.merge(df2, right_on='ENV2', left_on='ENV1', how='right', indicator=True)
     .query('_merge == "right_only"')
     .drop('_merge', 1))

df3

然后从df2中删除(12,16,25):

df2 = df2.drop(df3.index, axis=0) # Step 2
df2

相关问题