为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据来自不同数据框的列中的条目对数据框应用 Pandas 过滤器(无连接)

如何根据来自不同数据框的列中的条目对数据框应用 Pandas 过滤器(无连接)

守着一只汪 2022-10-25 15:20:04
例如,我有一个数据框 (df_1),其中一列包含一些文本数据。第二个数据框 (df_2) 包含一些数字。如何检查文本是否包含第二个数据框中的数字?df_1                       Note0  The code to this is 10031  The code to this is 1004df_2   Code_Number0         10061         1003所以我想检查 df_1 [Note] 中的条目是否包含 df_2 [Code_Number] 中的条目我尝试使用以下代码:df_1[df_1['Note'].str.contains(df_2['Code_Number'])]并且我知道我不能使用连接,因为我没有加入的密钥。应用过滤后我正在寻找的最终结果是:   Note              0  The code to this is 1003    
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

试试这个,看看它是否涵盖了您的用例:使用itertools 的产品和基于条件的过滤器获取两列的交叉笛卡尔:

from itertools import product

m = [ left for left, right

      in product(df.Note,df1.Code_Number) 

      if str(right) in left]


pd.DataFrame(m,columns=['Note'])


               Note

0   The code to this is 1003


查看完整回答
反对 回复 2022-10-25
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

做这个:

df_1.loc[df_1['Note'].apply(lambda x: any(str(number) in x for number in df_2['Code_Number']))]



查看完整回答
反对 回复 2022-10-25
?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

Firstly, you have to create 1 column in your df1 where the notes are with a list of numbers that are present in the Notes and then Compare the List column of numbers with the List column of the df2 where the numbers are present(both should be in list format)




#Extract Numbers from Notes

a_string = "0abcadda1 11 def 23 10007"


numbers = [int(word) for word in a_string.split() if word.isdigit()]


print(numbers)



list_test = "103,23"


#Finding common element from both lists the list

L1 = [2,3,4]

L2 = [1,2]

[i for i in L1 if i in L2]



S1 = set(L1)

S2 = set(L2)

print(S1.intersection(S2))


#If you want to find out the common element


def common_data(list1, list2):

    result = False


    # traverse in the 1st list 

    for x in list1:


        # traverse in the 2nd list 

        for y in list2:


            # if one common 

            if x == y:

                result = True

                return result


    return result



# driver code 


a = [1, 2, 3, 4, 5]

b = [5, 6, 7, 8, 9]

print(common_data(a, b))


a = [1, 2, 3, 4, 5]

b = [6, 7, 8, 9]

print(common_data(a, b)) 


查看完整回答
反对 回复 2022-10-25
  • 3 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信