如何使用python在多个数据文件列中搜索字符串并将其复制到新列中?

时间:2019-06-11 18:05:07

标签: python pandas dataframe multiple-columns

我正在尝试使用Python在数据帧的多个列中查找与子字符串的匹配项,如果找到子字符串,则将整个字符串复制到新列中。

数据字符串是从另一个df中以逗号分隔的字符串中提取的。因此,每一行中都有不同数量的字符串。 A列中的字符串可能是也可能不是我要复制的字符串。如果不是,则B列中的字符串为。有些行的D和E列中包含数据,但我们不必使用它们。 (在现实世界中,这些是网站url,我试图仅从特定域中收集这些URL,它们可能是该行中的第一个或第二个。我在示例中使用了简单的字符串。)我正在尝试使用np.where,但是我没有得到一致的结果,特别是如果正确的字符串在A列中,但在B列中没有重复。Np.where似乎仅应用“ y”,而不应用“ x”。我还尝试过if / where循环中的变体,但效果不佳。

import pandas as pd 

df = pd.DataFrame({"A": ["blue lorry", "yellow cycle", "red car", "blue lorry", "red truck", "red bike", "blue jeep", "yellow skate", "red bus"], "B": ["red train", "red cart", "red car", "red moto",'', "red bike", "red diesel", "red carriage",''], "C": ['','','', "red moto",'', "red bike", "red diesel", "red carriage",''], "D": ['','','', "red moto",'', "red bike", '','','']})

这会产生df:

    A               B               C               D
0   blue lorry      red train       
1   yellow cycle    red cart        
2   red car         red car         
3   blue lorry      red moto        red moto        red moto
4   red truck           
5   red bike        red bike        red bike        red bike
6   blue jeep       red diesel      red diesel  
7   yellow skate    red carriage    red carriage    
8   red bus                             

我跑步时:
df['Red'] = np.where("red" in df['A'], df['A'], df['B'])

它返回:

    A               B               C               D               Red
0   blue lorry      red train                                       red train
1   yellow cycle    red cart                                        red cart
2   red car         red car                                         red car
3   blue lorry      red moto        red moto        red moto        red moto
4   red truck               
5   red bike        red bike        red bike        red bike        red bike
6   blue jeep       red diesel      red diesel                      red diesel
7   yellow skate    red carriage    red carriage                    red carriage
8   red bus                 

第4行和第8行的Red列缺失,但我希望它从A列复制(正确的)字符串。
我了解基本结构是:numpy.where(condition,x,y)
我尝试应用代码,因此条件是查找“红色”,如果找到“红色”,则复制A列中的字符串,如果找不到,则复制B列中的字符串。但似乎我只得到列B字符串。任何帮助表示赞赏。

显然我是新来的。我从这些主题中获得了有关np.where的帮助,但我认为使用数值和字符串以及我的多列内容之间存在一些差异:
np.where Not Working in my Pandas
Efficiently replace values from a column to another column Pandas DataFrame
Update Value in one column, if string in other column contains something in list

1 个答案:

答案 0 :(得分:0)

str。包含没有“处于”状态的作品。正确的代码是:

df['Red'] = np.where(df['A'].str.contains('red'), df['A'], df['B'])   

感谢特里!