Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字符串列表中查找字符串并在中创建新列_Python_Pandas - Fatal编程技术网

Python 在字符串列表中查找字符串并在中创建新列

Python 在字符串列表中查找字符串并在中创建新列,python,pandas,Python,Pandas,我是Python新手,在这里尝试解决性能问题。 我有两个数据帧 数据帧1 col1 col2 holiday party party party bagel snack fruit snack 数据帧2: col1 col2 bagel wednesday snack coffee for party

我是Python新手,在这里尝试解决性能问题。 我有两个数据帧

数据帧1

col1        col2
holiday     party
party       party
bagel       snack
fruit       snack
数据帧2:

col1                            col2
bagel wednesday                 snack               
coffee for party                snack
holiday party                   party
数据框1有2列。我需要在DataFrame2.col1中查找DataFrame1.col1,并在DataFrame2.col2中使用DataFrame1.col2值创建一个新列 目前,我正在使用一个循环来实现这一点,这需要很长时间。我正在寻找一种有效的方法来做到这一点。此外,如果我得到多个匹配项,我应该始终使用从DataFrame1找到的第一个匹配项。例如,“coffee For party”有来自DF1、零食和party的两个匹配项,在这种情况下,“零食”应该从DF1.col2中选择

谢谢
RL

我认为您必须在一周中的几天内循环(但并非df2的所有行(df.col.str.contains将以优化的方式为您执行内部循环)


以下是数据帧:df1=pd.DataFrame({'col1':['周一'、'周二'、'周三'、'周四'、'周五'、'周六'、'周日']、'col2':['weekday'、'weekday'、'weekday'、'weekday'、'weekend'、]})df2=pd.DataFrame({'col1':【周五出发】、【周六周二观光】、【休息日】、【周一上班】、【col2】:【工作日】、【周末】、【工作日】】谢谢你的回答。它工作得很好,但我没有提到另一件事。这次我举了一个不同的例子。列1中的单词可以在df2.col1字符串中以任何顺序出现。contains不适用于此:Dataframe 1 col1 col2冰淇淋零食冷饮饮料数据框架2:col1 col2冰激凌零食冷饮饮料休息日冰激凌零食我不明白你的意思。用一个例子更新原来的问题。我现在更改了这个例子。你能看一下并告诉我如何继续吗?
for item in df1.col2.unique():
    for idx, row in df1[df1.col2==item].iterrows():
        df2.loc[df2.col1.str.contains(row.col1), 'col3'] = item