如何使用基于字符串包含条件的值填充列

2024-09-29 19:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

data = {
    'employee'  : ['Emp1', 'Emp2', 'Emp3', 'Emp4', 'Emp5'],
    'code'      : ['2018_1', '2018_3', '2019_1', '2019_2', '2017_1'],
}

old_salary_bonus = 3000

new_salary_bonus = {
    '2019_1': 1000,
    '2019_2': 980,
}

df = pd.DataFrame(data)

任务:根据以下条件添加df['salary\u bonus']列: 如果员工的代码包含“2019”,请使用代码值从新的薪资奖金中检索薪资奖金值,否则使用旧的薪资奖金值。你知道吗

预期产量:

   employee  code     salary_bonus
0  Emp1      2018_1   3000
1  Emp2      2018_3   3000
2  Emp3      2019_1   1000
3  Emp4      2019_2   980
4  Emp5      2017_1   3000

请帮忙。你知道吗


Tags: 数据代码dfdataemployeecode薪资奖金
2条回答

使用^{}^{}替换不匹配的值:

import pandas as pd

data = {
    'employee'  : ['Emp1', 'Emp2', 'Emp3', 'Emp4', 'Emp5'],
    'code'      : ['2018_1', '2018_3', '2019_1', '2019_2', '2017_1'],
}

old_salary_bonus = 3000

new_salary_bonus = {
    '2019_1': 1000,
    '2019_2': 980,
}

df = pd.DataFrame(data)

df['salary_bonus'] = df['code'].map(new_salary_bonus).fillna(old_salary_bonus)
print (df)
  employee    code  salary_bonus
0     Emp1  2018_1        3000.0
1     Emp2  2018_3        3000.0
2     Emp3  2019_1        1000.0
3     Emp4  2019_2         980.0
4     Emp5  2017_1        3000.0

如果不匹配,get的另一个解决方案具有默认值:

df['salary_bonus'] = df['code'].map(lambda x: new_salary_bonus.get(x, old_salary_bonus))

您可以使用以下代码:

df['salary_bonus'] = old_salary_bonus
df.loc[df['code'].isin(list(new_salary_bonus)), 'salary_bonus'] = list(new_salary_bonus.values())

相关问题 更多 >

    热门问题