我正在Microsoft Azure Databricks中使用两个数据框。
我已经有一个包含“我的主数据”的数据框。我每天还会收到带有“所有”记录的完整数据包。但是,在此数据框内的记录可能会发生更改,并且记录也可以删除和添加。
在两个数据帧之间获取此数据增量或变更集的最佳方法,也许是最简单的方法?
更新 我每天都会收到的DataFrame 1->
customer score
MERCEDES 1.1
CHRYSLER 3.0
DataFrame 2->我的主人
customer score
BMW 1.1
MERCEDES 1.3
那我需要得到什么?
customer score
BMW 1.1 -> cause was deleted in receiving data
MERCEDES 1.3 -> cause was value changed
CHRYSLER 3.0 -> cause was added new
答案 0 :(得分:0)
一种解决方案是将接收到的日期列'RDate
'附加到每个数据框。然后连接两个数据帧。然后使用sort by
选择最新值。
import numpy as np
import pandas as pd
from datetime import datetime
df1 = pd.DataFrame({'customer':['MERCEDES','CHRYSLER'], 'score':[1.1, 3.0]})
df2 = pd.DataFrame({'customer':['BMW','MERCEDES'], 'score':[1.1, 1.3]})
df2['RDate']='2018-11-01'
df1['RDate']='2018-11-07'
mdf = pd.concat([df1, df2])
mdfs =mdf.sort_values(by='RDate')
mdfs.drop_duplicates('customer', keep='last')
原始串联数据框:
最终(重复删除):
答案 1 :(得分:0)
您也可以尝试:
>>> df1
customer score
0 MERCEDES 1.1
1 CHRYSLER 3.0
>>> df2
customer score
0 BMW 1.1
1 MERCEDES 1.3
在列上连接df1和df2。
>>> df = pd.concat([df1,df2], axis=0)
现在您可以将groupby
与客户一起使用,因为这是last(offset)
方法更新的关键,该方法很方便用于设置时间序列数据的最终期限
>>> df.groupby(['customer'], as_index=False).last()
customer score
0 BMW 1.1
1 CHRYSLER 3.0
2 MERCEDES 1.3
as_index=False
实际上是与groupby
一起使用时的“ SQL样式”分组输出
答案 2 :(得分:0)