簡體   English   中英

根據另一列的字符串創建一個新列

[英]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.

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