Python 优先连接数据帧
我有两个类似的数据帧(Python 优先连接数据帧,python,pandas,dataframe,concatenation,Python,Pandas,Dataframe,Concatenation,我有两个类似的数据帧(df1&df2),具有列id、日期和计数 我想连接这两个df,如果{id,date}重叠,我想优先考虑df2中的行 e、 g: df1的记录是:ID12018/02/03,45 df2的记录是:ID12018/02/03,65 当我合并/concat时,我只需要来自df2的记录,即{id12018/02/03,65} 除了这个重复的解析逻辑,我还需要df的所有其他行。如何在python中实现这一点?您可以使用可选参数来删除重复项 作为一个玩具实例,考虑框架: df1 = p
df1
&df2
),具有列id、日期和计数
我想连接这两个df,如果{id,date}
重叠,我想优先考虑df2中的行
e、 g:
df1的记录是:ID12018/02/03,45
df2的记录是:ID12018/02/03,65
当我合并/concat时,我只需要来自df2的记录,即{id12018/02/03,65
}
除了这个重复的解析逻辑,我还需要df的所有其他行。如何在python中实现这一点?您可以使用可选参数来删除重复项
作为一个玩具实例,考虑框架:
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
删除重复项,并保留最后一个
,以确保从df2
中保留信息
df_concatenated = pd.concat([df1, df2]).drop_duplicates(subset="id", keep="last")
df_concatenated
> id time
1 25
3 45
4 19
5 14
2 11
9 12
使用
set_index
方法,然后循环删除df1
中所有遇到的df2
项
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
我相信你要找的和这个差不多 根据anky_91的回答,您应该使用
df2获得所需的结果。首先组合(df1)
有关组合2个不规则数据帧时此函数行为的详细说明,请参阅