Warm tip: This article is reproduced from serverfault.com, please click

conditional statements-Python-使用另一列上的通配符列表搜索为新列生成值

(conditional statements - Python- Generate values for a new column using wildcard list search on another column)

发布于 2020-12-10 16:34:03

目前,我正在根据产品代码为每个产品分配不同的流入量(浮点值)=>应该有2列:PRODUCT_CODE'和'INFLOW_RATE'。产品代码包含4个字符,规则如下:

  • 如果代码以“ L”,“ H”或“ M”开头:将浮点值= 1.0分配给“ INFLOW_RATE”列。
  • 如果代码是“ SVND”或“ SAVL”:将浮点值= 0.1分配给“ INFLOW_RATE”列。
  • 其他情况:在“ INFLOW_RATE”列中分配浮点值= 0.5。

示例数据如下:

图片

产品代码超过50种,因此我认为最好检查条件并使用通配符分配值。到目前为止,我设法提出了以下代码:

Import re    
CFIn_01 = ['SVND','SAVL']
CFIn_10 = ["M.+","L.+","H.+"]
file_consol['INFLOW_RATE'] = 0.5
file_consol.loc[file_consol['PRODUCT_CODE'].isin(CFIn_01), 'INFLOW_RATE'] = 0.1
file_consol.loc[file_consol['PRODUCT_CODE'].isin(CFIn_10), 'INFLOW_RATE'] = 1.0

但是,当我检查结果时,“ INFLOW_RATE”的所有列仍填充0.5,而不是我期望的规则。我不确定该问题的适当代码是什么。任何帮助或建议,不胜感激!

Questioner
Zack Nguyen
Viewed
11
Anna Semjén 2020-12-11 00:42:56

创建自定义函数,就像使用简单的字符串一样:

def my_func(word: str):
    if word.startswith('H') or word.startswith('L') or word.startswith('M'): 
        out = 0.1
    elif word == 'SVND' or word == 'SAVL':
        out = 1.0
    else:
        out = 0.5
    return out

然后应用功能:

df['INFLOW'] = df.PRODUCT_CODE.apply(my_func)