根据差异连接两个数据框架,同时保留共同的行和列python



上下文:我试图将新数据框中的数据添加到旧数据框中,其中它们之间唯一的区别是数据已被其他信息取代。我将用一个例子来更好地解释我自己:

假设旧的数据框架有这样的结构:

test_old = pd.DataFrame.from_dict({'FactsEN' :['sales','price','promotion','sales','price','promotion'], 'Sales' : [12345,12,11,54321,14,12], 'Type' : ['type1','type1','type1','type2','type2','type2']})

test_new = pd.DataFrame.from_dict({'FactsEN' :['sales','price','new_promotion','sales','price','new_promotion'], 'Sales' : [12345,12,11,54321,14,13], 'Type' : ['type1','type1','type1','type2','type2','type2']})

我如何连接两个数据框架,保持共同的列,并简单地添加它们之间的差异?理想情况下,数据帧将从下面开始:

>>> test_old
FactsEN  Sales   Type
0      sales  12345  type1
1      price     12  type1
2  promotion     11  type1
3      sales  54321  type2
4      price     14  type2
5  promotion     12  type2
>>> test_new
FactsEN  Sales   Type
0          sales  12345  type1
1          price     12  type1
2  new_promotion     11  type1
3          sales  54321  type2
4          price     14  type2
5  new_promotion     13  type2

:

FactsEN  Sales   Type
0          sales  12345  type1
1          price     12  type1
2      promotion     11  type1
3  new_promotion     11  type1
4          sales  54321  type2
5          price     14  type2
6      promotion     12  type2
7  new_promotion     13  type2

我正在尝试连接和合并,但他们都没有设法得到输出…

concatenated_dataframe = pd.merge(old,new, how='outer', left_on=new.columns, right_on=old.columns)

非常欢迎任何帮助!

可以在多个列上使用pandas.DataFrame.merge和join。

pd.merge(test_old, test_new, on=['FactsEN',  'Sales',   'Type'], how="outer")

这给了我们预期的数据
FactsEN  Sales   Type
0          sales  12345  type1
1          price     12  type1
2      promotion     11  type1
3          sales  54321  type2
4          price     14  type2
5      promotion     12  type2
6  new_promotion     11  type1
7  new_promotion     13  type2

您可以使用pd。连接并删除重复项:

pd.concat([test_old, test_new], ignore_index=True).drop_duplicates().reset_index(drop=True)

相关内容

  • 没有找到相关文章

最新更新