逐行检查一列中的值是否作为另一列中的值的子字符串存在,如果布尔值= False,则追加该字符串

时间:2019-09-03 11:46:59

标签: python pandas

我希望通过创建一个循环访问现有字段并检查这些项目是否存在的功能来提高产品Feed中列出的某些项目的标题说明的质量。

如果该列中的值不存在,我希望将该项目添加到标题开头的现有标题中。

到目前为止,我已经尝试了多种方法,包括使用布尔值来查看该值是true还是false。但是,在此之后,我将无法使用它遍历每一行并在字符串为FALSE时追加字符串。

以下是一些示例数据:

import pandas as pd
feed = pd.read_csv(r'...feed.csv')
cols = ['title', 'color', 'brand']
df = feed.loc[:,cols]

输出

title   color   brand
0   Testy Black Jumper  black   Testy
1   White T-Shirt   white   Testy_New
2   Testy Red Jacket    red Testy
3   Trousers    green   Testy

尝试1(无效)

def brand_checker(df):
    for row in df:
        if row in df[~df['title'].isin(df['brand']):
            m = df.filter(like='title').apply(lambda x: x.str.contains(str(df['brand'])), axis=1).all(axis=1)
            df['new_title'] = np.where(m, df['title'], df['brand'] + " " + df['title'])
        else:
            pass
    return df

df2 = brand_checker(df)
df.head(3)

此刻,我收到以下错误消息:

“ SyntaxError:语法无效”

预期输出:

title   color   brand
0   Testy Black Jumper  black   Testy
1   Testy White T-Shirt white   Testy
2   Testy_New Red Jacket    red Testy_New
3   Testy Trousers  green   Testy

如果标题中当前存在该品牌(顺序无关紧要),然后如果没有该商标,我如何逐行检查?

理想情况下,我想复制颜色和/或将来可能添加到数据框中的任何其他列的过程。

1 个答案:

答案 0 :(得分:0)

使用这样的东西可能会带来更好的运气。我注意到您在那里进行了一些str转换,因此,如果您的数据类型还不是str,则可能需要为此添加一些转换。


def brand_checker(df):
    for x in range(len(df.iloc[:])):
        if df.iloc[x,2] not in df.iloc[x,0]:
           df.iloc[x,2] = df.iloc[x,2] + " " + df.iloc[x,0]
    return df

df2 = brand_checker(df)
df.head(3)