使用另一列的条件值向dataframe添加新列

2024-10-04 05:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想向我的数据帧添加一个新列retailer_relationship。你知道吗

如果retailer列值以列表retailer_relationship中的任何项开头,我希望这个新列的每一行值都是'TRUE',否则是'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"

Tags: of数据infalsetruedf列表for
3条回答

您仍然可以在pandas中使用startswith

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

可以使用正则表达式将指定字符串开头的^特殊字符与另一个与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()

看看这对你有用吗。它将有助于共享df的样本或表示df的虚拟数据。你知道吗

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

相关问题 更多 >