我有2个具有相同结构的Df与条件合并。 我需要将所有ID原始但不重复,并且当存在相同ID时,我需要从val == 1的数据帧中选择一个,或者如果df1.val == df2.val则仅从df1中选择一行。 >
df1
id val X1 X2 X3
0 az1 1 10 12 16
1 az2 0 15 17 19
3 az3 0 8 9 17
4 az5 1 3 2 67
5 az7 0 31 2 68
df2
id val X1 X2 X3
0 az1 1 12 10 15
1 az2 1 13 15 18
3 az4 1 10 9 47
5 az6 0 33 12 68
6 az7 0 1 26 90
我想要这样的新df3:
df3
id val X1 X2 X3
0 az1 1 10 12 16
1 az2 1 13 15 18
3 az3 0 8 9 17
4 az4 1 10 9 47
5 az5 1 3 2 67
6 az6 0 33 12 68
7 az7 0 31 2 68
它包含:
使用命令:
Unique=pd.concat([df1, df2]).drop_duplicates(subset ="id", keep = False, inplace = False).sort_values('id')
Unique
id val X1 X2 X3
0 az3 0 8 9 17
1 az4 1 10 9 47
2 az5 1 3 2 67
3 az6 0 33 12 68
然后:
Temp = pd.concat([df1, Unique]).drop_duplicates().sort_values('id')
Temp
id val X1 X2 X3
0 az1 1 10 12 16
1 az3 0 8 9 17
2 az4 1 10 9 47
3 az5 1 3 2 67
4 az6 0 33 12 68
5 az7 0 31 2 68
最终:
df2_1 =df2[df2["val"]==1]
df3 = pd.concat([df2_1, Temp]).drop_duplicates(subset ="id", keep = "first", inplace = False).sort_values('id')
df3
id val X1 X2 X3
0 az1 1 10 12 16
1 az2 1 13 15 18
3 az3 0 8 9 17
4 az4 1 10 9 47
5 az5 1 3 2 67
6 az6 0 33 12 68
7 az7 0 31 2 68
有人想以更快,更优雅的方式完成这项工作吗?