Pandas:根据较长字符串列表中的匹配项扩展列字符串值

Pandas: Expand column string values based on matches in a list of longer strings

有人能想出一个巧妙的方法 pandas 来根据包含 URL 的列表将包含图像文件名的列扩展为包含完整 URL 的列吗?

我有以下数据框

df1:

"src"  "obs1"  "obs2"   
myimg_1  val_11  va1_12
myimg_2  val_11  val_22    

以及以下列表

列表 1:

https://path/to/myimg1
https://path/to/myimg2
.
.
https://path/to/myimgN

我需要的是以下数据框:

df2:

"src"  "obs1"  "obs2"
https://path/to/myimg1 val_11  val12
https://path/to/myimg2 val_21  val22

df1['src'] 的相同图像文件名可能存在于列表 1 中的多个 URL 中,但我们假设情况并非如此。否则我只需要一个 URL 而不是 list1.

中所有可能的匹配项

非常感谢任何提示!

从您的列表中创建一个数据框,并使用 urlparseos.path.basename 提取 url 的最后一部分。最后,使用 merge 将列 url 添加到原始数据框。

>>> df
      src    obs1    obs2
0  myimg1  val_11  va1_12
1  myimg2  val_11  val_22

>>> urls
['https://path/to/myimg1', 'https://path/to/myimg2', 'https://path/to/myimgN']
# from urllib.parse import urlparse
# import os.path

df1 = pd.DataFrame(urls, columns=['url'])
# df1['src'] = df1['url'].apply(lambda x: os.path.basename(urlparse(x).path))
df1['src'] = df1['url'].str.split('/').str[-1]

df = df.merge(df1, on='src')
>>> df
      src    obs1    obs2                     url
0  myimg1  val_11  va1_12  https://path/to/myimg1
1  myimg2  val_11  val_22  https://path/to/myimg2

注意:我稍微修改了您的数据框,因为 myimg_1 与您的列表不匹配。打字错误?