我正在使用python合并两个数据框:
join=pd.merge(df1,df2,on=["A","B"],how="left")
表1:
A B
a 1
b 2
c 3
表2:
A B Flag C
a 1 0 20
b 2 1 40
c 3 0 60
a 1 1 80
b 2 0 10
左加入后得到的结果是:
A B Flag C
a 1 0 20
a 1 1 80
b 2 1 40
b 2 0 10
c 3 0 60
在这里,由于表2,我们看到第1行和第2行出现了两次。我只想基于Flag
列保留一行。我想保留Falg
值为`= 1
所以最终的预期输出是:
A B Flag C
a 1 1 80
b 2 1 40
c 3 0 60
有什么Python方法可以做到吗?
答案 0 :(得分:1)
# raise preferred lines to the top
df2 = df2.sort_values(by='Flag', ascending=False)
# deduplicate
df2 = df2.drop_duplicates(subset=['A','B'], keep='first')
# merge
pd.merge(df1, df2, on=['A','B'])
A B Flag C
0 a 1 1 80
1 b 2 1 40
2 c 3 0 60
答案 1 :(得分:0)
该概念类似于您在SQL上执行的操作:用选择criterea分隔一个表(在这种情况下,最大值为flag),并保留足够的列以匹配联合表上的观察值。
join = pd.merge(df1, df2, how="left").reset_index()
maximums = join.groupby(by='A').max()
join = pd.merge(join, maximums, on=['Flag', 'A'])
答案 2 :(得分:0)
尝试使用此联接:
join=pd.merge(df1,df2,on=["A","B"],how="left", left_index=True, right_index=True)
print(join)