检查是否在其他 Pandas 数据框中找到了两列值

设置


我有 2 个熊猫 dfs(df1 和 df2),其中包含一些重叠行和一些非重叠行。


两个 dfs 都有列order_id和shop.


现在,如果对的组合DF2排排DF1比赛order_id和shop,然后什么。但是,如果一个DF1排不上的组合DF2行匹配order_id和shop,那么这个DF1行应添加到DF2。


例子


df2 是这样的,


    order_id    shop

0     12345     'NL'

1     45678     'FR'

2     12345     'DE'

3     34567     'NL'

现在如果df1这样,


    order_id    shop

0     12345     'NL'

1     45678     'FR'

然后什么都没有。


但如果df1那样的话,


        order_id    shop

0       12345       'NL'

1       99999       'FR'

2       12345       'UK'

那么行1和2应该被添加到df2即使shop值第1行order_id的第2行已经在df2。


结果df2应该是这样的,


    order_id    shop

0     99999     'FR'

1     12345     'UK'        

2     12345     'NL'

3     45678     'FR'

4     12345     'DE'

5     34567     'NL' 

请注意,order_id列是 int,shop列是 string。


因此,在图形方面,我想要实现的目标如下:

http://img.mukewang.com/6180f89300013d9310290311.jpg

代码


我创建了一条怪异的线,然后它并没有真正起作用......


到目前为止,我有,


result_df = df1[(~df1['order_id'].astype(str).isin(df2['order_id'].astype(str)))]

我该如何解决这个问题?


额外的


如果df1这样,


        order_id    shop

0       12345       'NL'

1       99999       'FR'

2       12345       'UK'

我如何df1与df2这样的我比较df3,


        order_id    shop

0       99999       'FR'

1       12345       'UK'



慕哥6287543
浏览 156回答 2
2回答

拉莫斯之舞

如果所有的行都是独特的使用concat有drop_duplicates:df = pd.concat([df2, df1], ignore_index=True).drop_duplicates()print (df)   order_id  shop0     12345  'NL'1     45678  'FR'2     12345  'DE'3     34567  'NL'5     99999  'FR'6     12345  'UK'如果不是唯一的过滤器不等于行merge同indicator=True,然后concat到df2:df3 = df1.merge(df2, how='left', indicator=True).query('_merge == "left_only"')[df1.columns]df = pd.concat([df2, df3], ignore_index=True)

小唯快跑啊

看起来您希望创建一组所有可能的组合?如果是这样,您可以使用以下方法创建唯一对:import pandas as pddata1 = {'order_id': [12345, 45678, 78901, 12345, 12901, 12345], 'shop': ['NL', 'FR', 'AB', 'AB', 'NL', 'NL']}df1 = pd.DataFrame(data=data1)data2= {'order_id': [12345, 45678, 12345, 34567], 'shop': ['NL', 'FR', 'DE', 'NL']}df2 = pd.DataFrame(data=data2)df3 = df1df3['Combi'] = df3['order_id'].astype('str') + df3['shop']df3.drop_duplicates('Combi', inplace=True)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python