使用 apply 函数在 pandas 中创建一个具有舍入值的新列
use apply function to create a new column with round value in pandas
我的数据框如下:
name | salary
Tom | 10200
Kate |
Mi | 32311
关于薪水,kate 的值是“ ”,round_salary,我将其值替换为“ ”,因此它在单元格中不显示任何内容。
问题:
我想根据薪水四舍五入到最接近的 10,000 创建一个新的薪水列。
结果如下所示
name | salary | round_salary
Tom | 10200 | 10000
Kate | |
Mi | 32311 | 30000
我的代码如下所示:
def round_income(salary):
if '' in salary:
return ''
else:
return salary.round(decimals = -4)
income.apply(lambda x: round_salary(x['income']), axis=1)
输出错误为:
KeyError: ('salary', 'occurred at index 0')
有人知道怎么解决吗?我发现 map 或 apply function 可以解决它,提前感谢任何人的帮助。 ~
如果没有缺失值但非数字为空值的解决方案:
income['salary'] = (pd.to_numeric(income['salary'], errors='coerce')
.round(decimals = -4)
.fillna(''))
print (income)
name salary
0 Tom 10000
1 Kate
2 Mi 20000
具有缺失值的解决方案 - salary
列中的所有数据均为数字:
income['salary'] = income['salary'].round(decimals = -4).astype('Int64')
print (income)
name salary
0 Tom 10000
1 Kate NaN
2 Mi 20000
我的数据框如下:
name | salary
Tom | 10200
Kate |
Mi | 32311
关于薪水,kate 的值是“ ”,round_salary,我将其值替换为“ ”,因此它在单元格中不显示任何内容。
问题:
我想根据薪水四舍五入到最接近的 10,000 创建一个新的薪水列。
结果如下所示
name | salary | round_salary
Tom | 10200 | 10000
Kate | |
Mi | 32311 | 30000
我的代码如下所示:
def round_income(salary):
if '' in salary:
return ''
else:
return salary.round(decimals = -4)
income.apply(lambda x: round_salary(x['income']), axis=1)
输出错误为:
KeyError: ('salary', 'occurred at index 0')
有人知道怎么解决吗?我发现 map 或 apply function 可以解决它,提前感谢任何人的帮助。 ~
如果没有缺失值但非数字为空值的解决方案:
income['salary'] = (pd.to_numeric(income['salary'], errors='coerce')
.round(decimals = -4)
.fillna(''))
print (income)
name salary
0 Tom 10000
1 Kate
2 Mi 20000
具有缺失值的解决方案 - salary
列中的所有数据均为数字:
income['salary'] = income['salary'].round(decimals = -4).astype('Int64')
print (income)
name salary
0 Tom 10000
1 Kate NaN
2 Mi 20000