合并两个数据框并基于合并添加新列

时间:2019-06-18 03:24:28

标签: python python-3.x pandas

我有两个基于我的数据库和API响应的数据框:

database_data=[
    {
        "id": 123,
        "user_id": 555,
        "_deleted": True
    },
    {
        "id": 456,
        "user_id": 555,
        "_deleted": True
    }]


api_data = [
    {
        "id": 123,
        "user_id": 555,
        "_deleted": True
    },
    {
        "id": 789,
        "user_id": 555,
        "_deleted": True
    }
]

基于这些数据,我想在API和数据库之间执行合并并应用规则:

  • 如果数据库中存在数据而API响应中不存在数据,那么我需要为仅存在于数据库中的行添加一列df ['_ deleted'] = True;
  • 如果双方都存在数据,则对于所有满足此条件的行,df ['_ deleted']列均应为False。

我已经开始编写一些代码来执行合并,但是我不知道如何添加此条件列。

df_db = pd.DataFrame.from_dict(database_data)
df_api = pd.DataFrame.from_dict(api_data)
# df_api.merge(df_db ... ??)

有什么建议可以解决吗?

2 个答案:

答案 0 :(得分:3)

我将mergeindicator=True一起使用

df_db=df_api.drop('_deleted',1).merge(df_db.drop('_deleted',1) , on = ['id','user_id'],indicator=True,how='right')
df_db['_deleted']=df_db['_merge'].map({'both':False,'right_only':True})

df_db
Out[135]: 
    id  user_id      _merge  _deleted
0  123      555        both     False
1  456      555  right_only      True

答案 1 :(得分:3)

mergeindicator=True一起使用,然后可以比较指标输出以获取列。

res = df_api.merge(df_db, how='left', indicator='indicator')
res['_deleted'] = res.pop('indicator') != "both"

   _deleted   id  user_id
0     False  123      555
1      True  789      555