根据两个dataframe pandas的date列查找列中不匹配的单元格

fivyi3re  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(157)

我有两个长度不相等的 Dataframe 。DF1
| 日期|价格|
| - -----|- -----|
| 2020年12月4日|南|
| 2019 - 04 - 21|三十|
| 2020 - 04 - 18|二十个|
DF2
| 日期|价格|
| - -----|- -----|
| 2020年10月4日|四十|
| 2019 - 04 - 21|三十|
| 2020 - 04 - 18|十一|
| 2020年4月20日|十四|
| 2020年4月22日|七十一|
我想根据日期列提取df 2上df 1价格不匹配的日期。例如,从上面的表格中,我应该得到这个:2020年4月13日。我需要:

  • 忽略df 1上不存在所有df 2日期。
  • count df 1中存在但df 2中不存在的日期数

由于相同日期的价格在df 1和df 2(20,8)中不匹配
df3['Answer'] = np.where(((df1['Date'] == df2['Date']) & (df1['price'] != df2['price'])) , True, False)
但是我得到了这个错误:ValueError:('长度必须匹配才能比较',(4128,),(4715,))

gzszwxb4

gzszwxb41#

通过DataFrame.merge使用左连接,通过DataFrame.dropna删除缺失值的行,添加indicator=True,因此可以在DataFrame.loc中筛选日期:

df = df1.dropna(subset=['price']).merge(df2,on=['Date','price'], how='left',indicator=True)

out = df.loc[df['_merge'].eq('left_only'),'Date'].tolist()
print (out)
['13-4-2020']

如果需要,使用boolean indexing过滤所有列:

out1 = df[df['_merge'].eq('left_only')]
print (out1)
        Date  price     _merge
0  13-4-2020   20.0  left_only

相关问题