Python 基于其他数据帧中的值移动列值

Python 基于其他数据帧中的值移动列值,python,pandas,dataframe,filtering,Python,Pandas,Dataframe,Filtering,我有两个数据帧,例如: df1: df2: 每当我从df1的关键字列表中找到df2中的任何值时,我都希望将找到的值移动到新的列表或数据帧中;这意味着这些值取自df2并移动到df3。结果如下: df2: df3: 或项目列表,如[李子、紫色、梨、苹果] 一个类似但不确切的问题是: 编辑:诸如“pears”或“pearl”之类的项目仍然应该为关键字“pear”标识。您可以使用str.contains()并使用|检查正则表达式。另外,我使用explode()将关键字转换为列表 import panda

我有两个数据帧,例如: df1:

df2:

每当我从df1的关键字列表中找到df2中的任何值时,我都希望将找到的值移动到新的列表或数据帧中;这意味着这些值取自df2并移动到df3。结果如下:

df2:

df3:

或项目列表,如[李子、紫色、梨、苹果]

一个类似但不确切的问题是:

编辑:诸如“pears”或“pearl”之类的项目仍然应该为关键字“pear”标识。

您可以使用str.contains()并使用
|
检查正则表达式。另外,我使用explode()将关键字转换为列表

import pandas as pd

c = ['Category','Keywords']
d = [['Fruit',['apple', 'pear', 'plum', 'grape']],
     ['Color',['red', 'purple', 'green']]]
df1 = pd.DataFrame(d,columns=c)


df2 = pd.DataFrame({'Items':['plum','purple','pear','orange',
                            'apple','rainbow','pearl','pears',
                            'peary','pineapple','plumber']})

print (df1)
print (df2)

keywords = df1.Keywords.explode().explode().to_list()
key_dict = r'({})'.format('|'.join(keywords))
mask = df2.Items.str.contains(key_dict)

df3 = df2[mask]
df2 = df2[~mask]

print (df2)
print (df3)
这将为您提供:

原始df1:

  Category                    Keywords
0    Fruit  [apple, pear, plum, grape]
1    Color        [red, purple, green]
原始df2:

        Items
0        plum
1      purple
2        pear
3      orange
4       apple
5     rainbow
6       pearl
7       pears
8       peary
9   pineapple
10    plumber
New df3:包含作为关键字一部分的所有项

        Items
0        plum
1      purple
2        pear
4       apple
6       pearl
7       pears
8       peary
9   pineapple
10    plumber
更新的df2:

     Items
3   orange
5  rainbow

感谢@nithish08的回复,我正在尝试做一个子字符串搜索,其中可能有诸如pears或pearl之类的单词,它仍然应该能够找到它。
import pandas as pd

c = ['Category','Keywords']
d = [['Fruit',['apple', 'pear', 'plum', 'grape']],
     ['Color',['red', 'purple', 'green']]]
df1 = pd.DataFrame(d,columns=c)


df2 = pd.DataFrame({'Items':['plum','purple','pear','orange',
                            'apple','rainbow','pearl','pears',
                            'peary','pineapple','plumber']})

print (df1)
print (df2)

keywords = df1.Keywords.explode().explode().to_list()
key_dict = r'({})'.format('|'.join(keywords))
mask = df2.Items.str.contains(key_dict)

df3 = df2[mask]
df2 = df2[~mask]

print (df2)
print (df3)
  Category                    Keywords
0    Fruit  [apple, pear, plum, grape]
1    Color        [red, purple, green]
        Items
0        plum
1      purple
2        pear
3      orange
4       apple
5     rainbow
6       pearl
7       pears
8       peary
9   pineapple
10    plumber
        Items
0        plum
1      purple
2        pear
4       apple
6       pearl
7       pears
8       peary
9   pineapple
10    plumber
     Items
3   orange
5  rainbow