python - Python-使用通配符列表搜索另一列为新列生成值
问题描述
目前,我正在根据产品代码为每个产品分配不同的流入率(浮动值)=> 应该有 2 列:PRODUCT_CODE'和'INFLOW_RATE'。产品代码有4个字符,规则如下:
- 如果代码以“L”、“H”或“M”开头:将浮点值 = 1.0 分配给“INFLOW_RATE”列。
- 如果代码是“SVND”或“SAVL”:将浮点值 = 0.1 分配给“INFLOW_RATE”列。
- 其他情况:将浮点值 = 0.5 分配给“INFLOW_RATE”列。
样本数据如下:
有超过 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,而不是我预期的规则。我不确定这个问题的合适代码是什么。任何帮助或建议表示赞赏!
解决方案
像使用简单字符串一样创建自定义函数:
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)
推荐阅读
- swift - Swift 无法从 NSView 打印“CGContextGetCTM:无效上下文 0x0”
- java - 将 MS SQL Server 表复制到 SQLite 表
- mysql-python - 在python 3中导入_mysql
- powershell - 通过 catch 块 powershell 时出错
- javascript - 使用 lodash 变换时如何包含已删除的数组项
- laravel - 类别树
- c++ - 展开函数模板的参数包
- python - 字符串列表,替换其他列表中的所有单词
- autoit - 运行函数不执行程序
- javascript - 导航栏在本地服务器和实时服务器上看起来不同,但可以通过文件打开它