为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2021-11-02 16:36:08
设置我有 2 个熊猫 dfs(df1 和 df2),其中包含一些重叠行和一些非重叠行。两个 dfs 都有列order_id和shop.现在,如果对的组合DF2排排DF1比赛order_id和shop,然后什么。但是,如果一个DF1排不上的组合DF2行匹配order_id和shop,那么这个DF1行应添加到DF2。例子df2 是这样的,    order_id    shop0     12345     'NL'1     45678     'FR'2     12345     'DE'3     34567     'NL'现在如果df1这样,    order_id    shop0     12345     'NL'1     45678     'FR'然后什么都没有。但如果df1那样的话,        order_id    shop0       12345       'NL'1       99999       'FR'2       12345       'UK'那么行1和2应该被添加到df2即使shop值第1行order_id的第2行已经在df2。结果df2应该是这样的,    order_id    shop0     99999     'FR'1     12345     'UK'        2     12345     'NL'3     45678     'FR'4     12345     'DE'5     34567     'NL' 请注意,order_id列是 int,shop列是 string。因此,在图形方面,我想要实现的目标如下:代码我创建了一条怪异的线,然后它并没有真正起作用......到目前为止,我有,result_df = df1[(~df1['order_id'].astype(str).isin(df2['order_id'].astype(str)))]我该如何解决这个问题?额外的如果df1这样,        order_id    shop0       12345       'NL'1       99999       'FR'2       12345       'UK'我如何df1与df2这样的我比较df3,        order_id    shop0       99999       'FR'1       12345       'UK'
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

如果所有的行都是独特的使用concat有drop_duplicates:


df = pd.concat([df2, df1], ignore_index=True).drop_duplicates()

print (df)

   order_id  shop

0     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)


查看完整回答
反对 回复 2021-11-02
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

看起来您希望创建一组所有可能的组合?如果是这样,您可以使用以下方法创建唯一对:


import pandas as pd


data1 = {'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 = df1

df3['Combi'] = df3['order_id'].astype('str') + df3['shop']

df3.drop_duplicates('Combi', inplace=True)

//img1.sycdn.imooc.com//6180f8b20001217202090243.jpg//img1.sycdn.imooc.com//6180f8b80001a64f02060215.jpg

查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号