Я думаю, что вы пытаетесь достичь слияния на Name
, а затем сохраняете только те строки, где ID
находится в поле String
.
Использование:
# df
Name ID Tag
0 AAA 1111 XYZ
1 AAA 1122 DEF
2 BBB 2222 PQR
3 BBB 2211 MNL
4 CCC 3333 STU
5 CCC 3311 JKL
6 DDD 4444 ABC
# df2
String Name
0 aasd1111dasd AAA
1 sdf1122sdf AAA # This line needed to be added to df2
2 sdffgs2222f BBB
3 fsfg3333sdf CCC
4 sefg4444sdf DDD
Слияние:
m = df.merge(df2)
Создание маски:
mask = m.apply(lambda x: str(x["ID"]) in x["String"], axis=1)
Фильтр по маске:
m = m[mask][["String", "Name", "Tag"]]
Выходы:
String Name Tag
0 aasd1111dasd AAA XYZ
3 sdf1122sdf AAA DEF
4 sdffgs2222f BBB PQR
6 fsfg3333sdf CCC STU
8 sefg4444sdf DDD ABC