我如何在另一个数据帧中搜索一个数据帧的内容?

问题描述 投票:0回答:1

我想搜索文本内容的一部分是否出现在另一个数据框中

我有两个数据框。

data_drop

Palabra Uri    Texto
a       aa    'abc abc bda abc abc bda'
b       bb    'abc abc bdx abc abc bda'
c       bb    'abc abc bdy abc abc bda'

df_keyword_drop

title   head    text
x      xx    'bdx abc'
y      yy    'bdy abc'
z      zz   'zzz zzz zzz'

输出为

结果

    title  name  text
    a      aa    'bdx abc'
    b      bb    'bdy abc'

更新:列数据和df_keyword的名称

我运行此代码

mask = df_keyword_drop.apply(lambda s: any(part in data_drop.loc[s.name, "Texto"] for part in s.text.split()),axis=1)
new = data_drop[mask].assign(text=df_keyword_drop.loc[mask, "text"])

但是我有这个错误:

--> 352                 raise KeyError(key)
353         return super().get_loc(key, method=method, tolerance=tolerance)
354 

KeyError: 279
python dataframe contains
1个回答
0
投票

您可以尝试以下方法:

mask = df2.apply(lambda s: any(part in df1.loc[s.name, "text"] for part in s.text.split()),
                 axis=1)
new = df1[mask].assign(text=df2.loc[mask, "text"])

对于掩码生成,我们获取df2的行,并检查字符串的any部分是否与相应行的文本字段匹配。然后,将遮罩应用于df1。由于所需的text列应来自df2,因此我们从df2assign该列并获得所需的新数据帧。

编辑以上解决方案假定数据帧的长度相等。如果其中之一较短,则

cropped = df2.iloc[:len(df1.index), :]
mask = cropped.apply(lambda s: any(part in df1.loc[s.name, "text"]
                               for part in s.text.split()),
                               axis=1)
new = df1[mask].assign(text=cropped.loc[mask, "text"])

输出的索引可能不是RangeIndex,即根据匹配情况,它可能会混合为[2,4,5,..]。要将其重置为[0,1,2 ...],请使用reset_index

new = new.reset_index(drop=True)
© www.soinside.com 2019 - 2024. All rights reserved.