使用来自另一列的条件值将新列添加到Pandas数据框

时间:2019-05-16 02:14:40

标签: python pandas

我想在数据框中添加一个新列retailer_relationship

如果'TRUE'列值以列表retailer中的任何项目开头,否则我希望retailer_relationship的新列的每个行值为'FALSE'

我尝试过的事情:

list_of_relationships = ("retailer1","retailer2","retailer3")

for i in df.index:
    for relationship in list_of_relationships:            
        if df.iloc[i]['retailer'].str.startswith(relationship):
            df.at[i, 'retailer_relationship'] = "TRUE"
        else:
            df.at[i, 'retailer_relationship'] = "FALSE"

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式,将^特殊字符(指定字符串的开头)与另一个与retailer_relationship的每个元素匹配的正则表达式组合在一起,因为startswith不接受正则表达式:

import re

regex = re.compile('^' + '|'.join(list_of_relationships))

df['retailer_relationship'] = df['retailer'].str.contains(regex).map({True: 'TRUE', False: 'FALSE'})

由于您需要文字字符串'TRUE''FALSE',因此我们可以使用map将布尔值转换为字符串。

另一种方法,其速度稍快,但我认为这并不重要:

df['retailer_relationship'] = df['retailer'].str.contains(regex).transform(str).str.upper()

答案 1 :(得分:0)

看看这是否适合您。共享您的df样本或代表它的虚拟数据将很有帮助。

df.loc['retailer_relationship'] = False
df.loc[df['retailer'].isin(retailer_relationship),'retailer_relationship'] = True

答案 2 :(得分:0)

您仍然可以在startswith中使用pandas

df['retailer_relationship'] = df['retailer'].str.startswith(tuple(retailer_relationship))