[英]create a new column based on string of another column
我有 dataframe 和下面的 A 列,我想創建一個名為“基於 A 列的復雜性”的新列。但是 output 不能反映我想要的 Z78E6221F6393D1456681DBFCE398 嗎?
A
dev DH
dev DHGP
dev SEA
dev MONO
dev SLIM DH
dev SLIM MONO
def complexity_column(df,classes):
conditions_region = [
(df[classes].str.contains("DH")),
(df[classes].str.contains("DHGP")),
(df[classes].str.contains("SEA")),
(df[classes].str.contains("MONO")),
(df[classes].str.contains("SLIM DH")),
(df[classes].str.contains("SLIM MONO"))
]
# create a list of the values we want to assign for each condition
values_regions = ['DH','CHGP', 'SEA','MONO','SLIM DH','SLIM MONO']
# create a new column and use np.select to assign values to it using our lists as arguments
df['COMPLEXITY'] = np.select(conditions_region, values_regions)
return df
output
complexity_column(df,"A")
output:
A COMPLEXITY
dev DH DH
dev DHGP DH
dev SEA SEA
dev MONO MONO
dev SLIM DH DH
dev SLIM MONO MONO
我的願望 output 如下
A COMPLEXITY
dev DH DH
dev DHGP DHGP
dev SEA SEA
dev MONO MONO
dev SLIM DH SLIM DH
dev SLIM MONO SLIM MONO
來自numpy.select的文檔: numpy.select(condlist, choicelist, default=0)
condlist:確定從選擇列表中的哪個數組獲取 output 元素的條件列表。 當滿足多個條件時,使用 condlist 中遇到的第一個條件。
您需要對conditions_region
中的元素重新排序,以確保更具體的條件首先出現,一般條件最后出現。
那是,
conditions_region = [
df[classes].str.contains("SLIM DH"),
df[classes].str.contains("SLIM MONO"),
df[classes].str.contains("DHGP"),
df[classes].str.contains("DH"),
df[classes].str.contains("SEA"),
df[classes].str.contains("MONO")
]
而不是 using.str.contains 它采用字符串的一個子集,為什么不只使用== ,即:
def complexity_column(df,classes):
conditions_region = [
(df[classes] == "DH"),
(df[classes] == "DHGP")),
(df[classes] == "SEA")),
(df[classes] == "MONO")),
(df[classes] == "SLIM DH")),
(df[classes] == "SLIM MONO"))
]
def column_maker(entry_row,list_of_strings):
output_string = ''
for i in list_of_strings:
if i in entry_row:
output_string = output_string +" "+i
return output_string
df['complexity'] = df[column_name].apply(lambda x:column_maker(x,list_of_strings))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.