优先连接熊猫数据框

时间:2019-02-19 09:16:38

标签: python pandas dataframe concatenation

我有2个相似的数据帧(df1df2),具有ID,日期,计数列。

我想将这2个df串联起来,使得如果{id,date}重叠,我希望优先选择df2中的行。

例如: df1有记录:id1, 2018/02/03, 45

df2有记录:id1, 2018/02/03, 65

合并/合并时,我只需要df2中的记录,即{id1, 2018/02/03, 65}。

除了这个重复的解析逻辑之外,我还需要两个df的所有其他行。如何在python中实现?

3 个答案:

答案 0 :(得分:2)

您可以为此使用drop_duplicates功能的可选参数。

作为一个玩具示例,请考虑以下框架:

df1 = pd.DataFrame({"id" : [1,2,3,4], "time" : [25, 35, 45, 15]})  
df2 = pd.DataFrame({"id" : [4,5,2,9], "time" : [19, 14, 11, 12]})  

然后,您所需要做的就是将df1df2串联起来,并用id删除重复项,并保留last以确保信息不被{ {1}}。

df2

答案 1 :(得分:0)

使用set_index方法,然后循环删除df2中所有df1个项目。

 df1 = pd.DataFrame({'id' : [1,2,3], 'date' : ['d1', 'd2', 'd3'], 'count': [11, 22, 33]})
 df2 = pd.DataFrame({'id' : [1,2,5], 'date' : ['d1', 'd5', 'd6'], 'count': [44, 55, 66]})
 df1 = df1.set_index(['id', 'date'])
 df2 = df2.set_index(['id', 'date'])

 for index, row in df2.iterrows():
     if index in df1.index:
         df1 = df1.drop(index)
 print(df1.append(df2))

         count
id date
2  d2       22
3  d3       33
1  d1       44
2  d5       55
5  d6       66

答案 2 :(得分:0)

我相信您要查找的内容与此question

类似

每个anky_91的答案,您都应该使用df2.combine_first(df1)

获得所需的结果

请查看documentation,以详细了解在组合2个不规则数据帧时此功能的行为。