![](/img/trans.png)
[英]Add a new column to pandas dataframe with coverted values from another column?
[英]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.