【发布时间】:2022-01-17 14:44:20
【问题描述】:
我有 2 个数据框,我想要创建一个匹配的 ID 列表。有了这些信息,我可以稍后执行合并(合并不是我的问题的一部分,我只想找出如何正确匹配行)。
DF1
| ID |
|---|
| 123 |
| 123B |
| 234 |
| 234B |
| 456 |
| 456B |
| asfdh5 |
| 45gh |
DF2
| ID |
|---|
| 123456 |
| 123B456 |
| BBBER4 |
| 234567YT |
| B9234BAA |
| 456XXA32 |
| 999GHF |
| pp9985 |
| 88AVKVBD |
Desired Result - 我想得到一个匹配的字符串列表
| Matches | |
|---|---|
| 0 | 123 |
| 1 | 123B |
| 2 | NaN |
| 3 | 234 |
| 4 | 234B |
| 5 | 456 |
| 6 | NaN |
| 7 | NaN |
| 8 | NaN |
我当前使用的代码如下
df2['ID'].str.extract(fr"({'|'.join(df1['ID'].values)})", expand=False)
问题是这段代码与 DF1 中的 ID 不完全匹配,如果您在上面的 Desired Results 中看到索引 2,结果是 123B,但是我我只得到 123。
以下是我使用当前代码得到的结果。
| Matches | |
|---|---|
| 0 | 123 |
| 1 | 123 |
| 2 | NaN |
| 3 | 234 |
| 4 | 234 |
| 5 | 456 |
| 6 | NaN |
| 7 | NaN |
| 8 | NaN |
任何帮助将不胜感激。感谢您, 钱
【问题讨论】:
-
@DSteman 正确,对于索引 4,它应该是 234B 等。而我的代码只得到 123 和 234(在某些情况下我缺少 B)