熊猫:如果df1中的子字符串存在于df2的字符串中,则合并两个数据帧 (如果字符串包含子字符串)

2024-09-27 23:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我想将df1连接到df2,其中df1包含一个url,df2包含一个url列表。你知道吗

df1和df2的形状不同

示例:

df1 = pd.DataFrame({'url': ['http://www.example.jp/pro/sanada16']})
df2 = pd.DataFrame({'urls': ['[https://www.example.jp/pro/minoya, http://www.example.jp/pro/tokyo_kankan, http://www.example.jp/pro/briansawazakiphotography, http://www.example.jp/pro/r_masuda, http://www.example.jp/pro/sanada16, ......]']})

我希望datafrmes加入的条件是df1.url中的http://www.example.jp/pro/sanada16存在于df2.url中。你知道吗

我考虑过将列表列到列,但是在df2.url中url的数量不是唯一的。你知道吗

我尝试将与df2.url匹配的df1.url子字符串添加到一个新列,以便可以加入新列,但无法使其工作:

df2['match'] = df2['urls'].apply(lambda x: x if x in df1['url'])

预期产量:

new_df = pd.DataFrame({'url': ['http://www.example.jp/pro/sanada16'], 'urls': ['[https://www.example.jp/pro/minoya, http://www.example.jp/pro/tokyo_kankan, http://www.example.jp/pro/briansawazakiphotography, http://www.example.jp/pro/r_masuda, http://www.example.jp/pro/sanada16, ......]']})

使用postgresql,我可以:

SELECT 
    b.url
    ,a.urls
FROM df2 a
join df1 b 
    on position(b.url in a.urls)>0

Tags: httpshttpurldataframe列表examplewwwurls
1条回答
网友
1楼 · 发布于 2024-09-27 23:26:58

如果我理解正确的话,这里有一个方法。您可以遍历要搜索的模式,然后使用df.at存储匹配项。你知道吗

import pandas as pd

data_1 = pd.DataFrame(
    {
        'url': ['http://www.ex.jp', 'http://www.ex.com']
    }
)

data_2 = pd.DataFrame(
    {
        'url': ['http://www.ex.jp/pro', 'http://www.ex.jp/pro/test', 'http://www.ex.com/path', 'http://www.ex.com/home']
    }
)

result = pd.DataFrame(columns = ['pattern', 'matches'])

for i in range(data_1.shape[0]):

    result.loc[i, 'pattern'] = data_1.loc[i, 'url']

    result.at[i, 'matches'] = [j for j in data_2['url'] if data_1.loc[i, 'url'] in j]

print(result)

提供:

             pattern                                            matches
0   http://www.ex.jp  [http://www.ex.jp/pro, http://www.ex.jp/pro/test]
1  http://www.ex.com   [http://www.ex.com/path, http://www.ex.com/home]

感谢您按要求更新您的问题。你知道吗

相关问题 更多 >

    热门问题