簡體   English   中英

使用來自另一列的條件值將新列添加到Pandas數據框

[英]Add new column to Pandas dataframe using conditional values from another column

我想在我的數據框中添加一個新列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"

您可以使用將^特殊字符(指定字符串的開頭)與另一個正則表達式結合使用的正則表達式,該正則表達式與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.loc['retailer_relationship'] = False
df.loc[df['retailer'].isin(retailer_relationship),'retailer_relationship'] = True

您仍然可以在pandas使用startswith

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM