[英]Comparing two pandas data frames and appending the rows that don't exist
我正在在线跟踪某些产品,并根据从api获取的一些数据创建数据框架,它会构建如下内容:
rank change usedprice sold
2015-11-16 08:34:00 335865 0.159583 17.51 False
2015-11-16 14:37:00 376721 0.121644 17.51 False
2015-11-17 00:10:00 422663 0.121952 17.51 False
2015-11-17 09:52:00 526799 0.246381 17.51 False
2015-11-18 00:10:00 590056 0.120078 17.51 False
2015-11-18 08:50:00 656206 0.112108 17.51 False
2015-11-18 23:10:00 723676 0.102818 17.51 False
每次搜索该产品时,我都会返回一个相似的数据框,但会添加新数据。
rank change usedprice sold
2015-11-16 02:34:00 289643 NaN 17.51 False
2015-11-16 08:34:00 335865 0.159583 17.51 False
2015-11-16 14:37:00 376721 0.121644 17.51 False
2015-11-17 00:10:00 422663 0.121952 17.51 False
2015-11-17 09:52:00 526799 0.246381 17.51 False
2015-11-18 00:10:00 590056 0.120078 17.51 False
2015-11-18 08:50:00 656206 0.112108 17.51 False
2015-11-18 23:10:00 723676 0.102818 17.51 False
2015-11-19 11:53:00 818999 0.131721 17.51 False
2015-11-19 20:46:00 840502 0.026255 17.51 False
2015-11-22 12:38:00 1112502 0.323616 17.51 False
2015-11-28 10:32:00 1445509 0.299332 17.51 False
2015-12-03 03:51:00 1795895 0.242396 17.51 False
2015-12-06 21:29:00 2071463 0.153443 17.51 False
2015-12-13 03:26:00 1188341 -0.426328 17.51 True
如何将新数据框与旧数据框进行比较,仅追加原始行中不存在的行?
由于数据来自多个来源,因此我无法删除第一个数据框,而只能用新的数据框替换它,有时它只会被馈送几行新信息,我需要查看该行是否已经存在于原始信息框中。 df并添加行(如果没有)。
似乎很简单,但是我似乎找不到答案。
我会用一个外join
导入新的生产线,以及fillna
方法,以填补空单元格与新列的值。
让我们将df_orig
称为原始数据帧,将df_new
称为包含新值的数据帧。 这应该足够了:
df_temp = df_orig.join(df_new, how='outer', rsuffix='_na')
for col in df_orig.columns:
df_temp[col].fillna(df_temp[col + '_na'], inplace=True)
df_orig = df_temp.drop(columns=[col + '_na for col in df_orig.columns])
如果可以假设任一帧中都没有重复项,则可以连接并删除重复项:
pd.concat([df1,df2]).drop_duplicates()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.