Python 如何通过一个键比较两个数据帧并创建一个新的数据帧,但只保留不在第一个数据帧中的键?

Python 如何通过一个键比较两个数据帧并创建一个新的数据帧,但只保留不在第一个数据帧中的键?,python,pandas,merge,Python,Pandas,Merge,在python 3和pandas中,我有两个具有相同结构的数据帧: data_1 = { 'numero_cnj' : ['0700488-61.2018.8.07.0017', '0003557-92.2008.4.01.3801', '1009486-37.2017.8.26.0053', '5005742-49.2017.4.04.9999', '0700488-61.2018.8.07.0017'], 'nome_normalizado' : ['MARIA DOS RE

在python 3和pandas中,我有两个具有相同结构的数据帧:

data_1 = {
    'numero_cnj' : ['0700488-61.2018.8.07.0017', '0003557-92.2008.4.01.3801', '1009486-37.2017.8.26.0053', '5005742-49.2017.4.04.9999', '0700488-61.2018.8.07.0017'],
    'nome_normalizado' : ['MARIA DOS REIS DE OLIVEIRA SILVA', 'MARIA SELMA OLIVEIRA DE SOUZA E ANDRADE FERREIRA', 'SAO PAULO PREVIDENCIA - SPPREV', 'INSTITUTO NACIONAL DO SEGURO SOCIAL', 'GERALDO CAVALCANTE DA SILVEIRA']
}
df_1 = pd.DataFrame(data_1) 


data_2 = {
    'numero_cnj' : ['0700488-61.2018.8.07.0017', '5005742-49.2017.4.04.9999', '1009486-37.2017.8.26.0053', '0700488-61.2018.8.07.0017'],
    'nome_normalizado' : ['MARIA DOS REIS DE OLIVEIRA SILVA', 'INSTITUTO NACIONAL DO SEGURO SOCIAL', 'SAO PAULO PREVIDENCIA - SPPREV', 'GERALDO CAVALCANTE DA SILVEIRA']
}
df_2 = pd.DataFrame(data_2) 
“numero_cnj”列是同一项目的标识键,但它可以重复,因为不止一个人/名称可以引用该项目

我想通过键“numero_cnj”比较这两个数据帧,并从df_1创建一个新的数据帧,但只保留df_2中的行或键,而不保留df_1中的键-保留df_1中未找到的所有键

比如说

df_1
    numero_cnj  nome_normalizado
0   0700488-61.2018.8.07.0017   MARIA DOS REIS DE OLIVEIRA SILVA
1   0003557-92.2008.4.01.3801   MARIA SELMA OLIVEIRA DE SOUZA E ANDRADE FERREIRA
2   1009486-37.2017.8.26.0053   SAO PAULO PREVIDENCIA - SPPREV
3   5005742-49.2017.4.04.9999   INSTITUTO NACIONAL DO SEGURO SOCIAL
4   0700488-61.2018.8.07.0017   GERALDO CAVALCANTE DA SILVEIRA

df_2
    numero_cnj  nome_normalizado
0   0700488-61.2018.8.07.0017   MARIA DOS REIS DE OLIVEIRA SILVA
1   5005742-49.2017.4.04.9999   INSTITUTO NACIONAL DO SEGURO SOCIAL
2   1009486-37.2017.8.26.0053   SAO PAULO PREVIDENCIA - SPPREV
3   0700488-61.2018.8.07.0017   GERALDO CAVALCANTE DA SILVEIRA
在这种情况下,新数据帧将只有以下行:

0003557-92.2008.4.01.3801   MARIA SELMA OLIVEIRA DE SOUZA E ANDRADE FERREIRA

请问,有人知道这样做的最佳策略吗?

如果我正确阅读了您的问题,您应该使用join(merge)和
how=outer

merge =  pd.merge(df_1, df_2, on = "numero_cnj", suffixes = ["", "_y"],  how = "outer", indicator=True)
merge[merge._merge == "left_only"][["numero_cnj", "nome_normalizado"]]
输出为:

                  numero_cnj                                  nome_normalizado
4  0003557-92.2008.4.01.3801  MARIA SELMA OLIVEIRA DE SOUZA E ANDRADE FERREIRA

我现在没有时间验证,但这似乎可以通过加入来实现。你的意思是“df_2,但不在df_1中”-因为输出似乎表明它是另一种方式。感谢@Roy2012-保留df_1中未在df_2Great中找到的所有密钥。请看下面我的答案。我收回我的最后一条评论,加入可能不会起作用,但我发现了一个类似的问题,如果@Roy2012的答案不起作用,可能会有帮助。如果这回答了你的问题,请告诉我。谢谢,一切似乎都是正确的。我在一个更大的数据帧上测试了它