Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果值存在于其他df中,则删除行_Python_Pandas_Dataframe_Drop - Fatal编程技术网

Python 如果值存在于其他df中,则删除行

Python 如果值存在于其他df中,则删除行,python,pandas,dataframe,drop,Python,Pandas,Dataframe,Drop,我有两个数据帧df和ds 作为pd进口熊猫 ds = pd.DataFrame({'Price': {0: 1200, 1: 1400, 2: 1500, 3: 1800}, 'Time(s)': {0: 500, 1: 500, 2: 600, 3: 500}, 'id': {0: 'a0

我有两个数据帧
df
ds
作为pd进口熊猫

ds = pd.DataFrame({'Price': {0: 1200, 1: 1400, 2: 1500,
                                 3: 1800},
                   'Time(s)': {0: 500, 1: 500, 2: 600,
                                 3: 500},
                   'id': {0: 'a01', 1: 'a02', 2: 'a03',
                          3: 'a04'}})

df = pd.DataFrame({'Price': {0: 1200, 1: 1500, 2: 1450,
                                 3: 1800, 4: 1200},
                   'Time(s)': {0: 500, 1: 500, 2: 500,
                                 3: 500, 4: 500},
                   'id': {0: 'a01', 1: 'a02', 2: 'a03',
                          3: 'a04', 4: 'a05 '}})
ds输出:

   Price        Time(s)     id   
   1200         500         a01 
   1400         500         a02
   1500         600         a03
   1800         500         a04        
   Price        Time(s)     id  
   1200         500         a01 
   1500         500         a03
   1450         500         a02
   1800         500         a04
   1200         500         a05        
df输出:

   Price        Time(s)     id   
   1200         500         a01 
   1400         500         a02
   1500         600         a03
   1800         500         a04        
   Price        Time(s)     id  
   1200         500         a01 
   1500         500         a03
   1450         500         a02
   1800         500         a04
   1200         500         a05        
所需输出:
df1:

   Price        Time(s)     id  
   1200         500         a05         
我想比较它们,如果两个datframes的
id
列中有相同的值,请将它们删除,并将结果保存到新的数据帧
df1
,我尝试:

df1=pd.concat([ds,df])

df1.删除重复项(subset='id',keep='last')
但是数值是相同的

这样就可以了:

ds.merge(df, on='id', how='outer', indicator=True, suffixes=('_xxx',''))
  .query('_merge!="both"')[df.columns]

合并模拟SQL完全外部联接
indicator=True
添加
\u merge
列,该列显示
仅左、仅右或同时显示这两个
,在这种情况下,任何不同时显示这两个的都是解决方案,但一般来说,您可以在后续查询筛选器中更加具体


在某些情况下,使用
pd.concat
的其他建议也会奏效,但在我看来,这些建议不够通用。这些解决方案可能包括来自两个数据帧的唯一记录,但在本例中,您是从另一个数据帧请求的。

keep=False
应该可以做到这一点。
另外,它必须作为布尔而不是字符串传递

pd.concat([df, ds]).drop_duplicates(subset='id', keep=False, ignore_index=True)
输出:

    Price   Time(s) id
0   1200    500     a05
df1=pd.merge(df,ds,how='outer',on='id',indicator='common')

df1=df1.loc[df1['common']!='both']

df1矢量化过孔也是一个选项:

将熊猫作为pd导入
将numpy作为np导入
ds=pd.DataFrame({'Price':{0:1200,1:1400,2:1500,
3: 1800},
"时间:{0:500,1:500,2:600,,
3: 500},
'id':{0:'a01',1:'a02',2:'a03',
3:'a04'}})
df=pd.DataFrame({'Price':{0:1200,1:1500,2:1450,
3: 1800, 4: 1200},
"时间:{0:500,1:500,2:500,,
3: 500, 4: 500},
'id':{0:'a01',1:'a02',2:'a03',
3:'a04',4:'a05'}})
out=df.loc[np.where(df['id'].isin(ds['id']),False,True]
#展示
打印(输出到字符串(索引=False))
价格时间id 1200 500 a05
这回答了你的问题吗?使用
keep=False
删除所有duplicates@Nick不,那不是mine@Nickkeep=false在pd.concat()
false
用大写字母拼写后仍无法提供完整的数据帧<代码>df1。删除重复项(subset='id',keep=False)