我正在尝试使用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
答案 0 :(得分:0)
str。包含没有“处于”状态的作品。正确的代码是:
df['Red'] = np.where(df['A'].str.contains('red'), df['A'], df['B'])
感谢特里!