我有2个相似的数据帧(df1
和df2
),具有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中实现?
答案 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]})
然后,您所需要做的就是将df1
和df2
串联起来,并用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个不规则数据帧时此功能的行为。