繁体   English   中英

比较两个熊猫数据框并追加不存在的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM