python-3.x - 使用中值基础特定列值选择的 Python 插补值
问题描述
我想用我的数据框的中位数来估算一些空白值,如下所示:
ID Salary Position
1 10 VP
2 VP
3 5 VP
4 15 AVP
5 20 AVP
6 AVP
现在必须用职位级别 Median 替换空白工资。例如:ID = 2 的空白工资和作为 VP 的职位应按职位 VP 的中位数 5 估算,而 AVP 的相同空白应以类似的方式估算。
我使用了以下代码,但这是在 Position 级别采用完整的中位数而不是特定的中位数:
impute_median=df['Salary'].median()
df['Salary']=df['Salary'].fillna(impute_median)
输出应如下所示:
ID Salary Position
1 10 VP
2 5 VP
3 5 VP
4 15 AVP
5 20 AVP
6 15 AVP
解决方案
要填写median
您应该使用:
df['Salary'] = df['Salary'].fillna(df.groupby('Position').Salary.transform('median'))
print(df)
ID Salary Position
0 1 10.0 VP
1 2 7.5 VP
2 3 5.0 VP
3 4 15.0 AVP
4 5 20.0 AVP
5 6 17.5 AVP
如果要填写最接近中值(更少)
df['Salary'] = df['Salary'].fillna(df.Salary.sub(df.groupby('Position')
.Salary
.transform('median'))
.where(lambda x: x.le(0))
.groupby(df['Position'])
.transform('idxmax')
.map(df['Salary']))
print(df)
0 1 10.0 VP
1 2 5.0 VP
2 3 5.0 VP
3 4 15.0 AVP
4 5 20.0 AVP
5 6 15.0 AVP
推荐阅读
- revit-api - 从 REVIT Api 导入 gbxml
- python-3.x - 如何加快循环超过 4GB 制表符分隔的文本文件
- java - 如何找到 AWS EC2 客户端的角色?
- c - Clion 无法导入 C 文件(Makefile 未更新)
- c++ - 如何在 OOP 中正确使用 ifstream?
- autodesk-forge - Forge ARKit:无法在 Unity 中加载模型
- c++ - 程序终止时堆栈损坏?
- reactjs - 使用 Next-routes 为嵌套路由使用容器组件
- shopify - 集合过滤器分组 - 自定义用户体验
- android - ListView 不可点击(自定义适配器)