python - 如何在 Pandas DataFrame 中执行列值的条件更新?
问题描述
我有一个下面的数据框有什么方法可以在熊猫中执行条件添加列值。
emp_id emp_name City months_worked default_sal total_sal jan feb mar apr may jun
111 aaa pune 2 90 NaN 4 5 5 54 3 2
222 bbb pune 1 70 NaN 5 4 4 8 3 4
333 ccc mumbai 2 NaN NaN 9 3 4 8 4 3
444 ddd hyd 4 NaN NaN 3 8 6 4 2 7
我想要达到的目标
- 如果 city = pune default_sal 应在 total_sal 中更新 for ex for emp_id 111 total_salary 应为 90
- 如果 city!=pune 则应根据months_worked 值更新总工资。例如,emp id 333 months_worked =2 所以添加 jan 和 feb 值应更新为 total_sal,即 9+3=12
所需的 O/P
emp_id emp_name City months_worked default_sal total_sal jan feb mar apr may jun
111 aaa pune 2 90 90 4 5 5 54 3 2
222 bbb pune 1 70 70 5 4 4 8 3 4
333 ccc mumbai 2 NaN 12 9 3 4 8 4 3
444 ddd hyd 4 NaN 21 3 8 6 4 2 7
解决方案
np.where
在创建帮助系列之后使用
s1=pd.Series([df.iloc[x,6:y+6].sum() for x,y in enumerate(df.months_worked)],index=df.index)
np.where(df.City=='pune',df.default_sal,s1 )
Out[429]: array([90., 70., 12., 21.])
#df['total']=np.where(df.City=='pune',df.default_sal,s1 )
推荐阅读
- git - 为什么 Visual Studio 2019 团队资源管理器中的 Git rebase 报告对相距很远的行的更改发生合并冲突?
- reactjs - Meteor 订阅中的嵌套 Tracker.autorun()。组件卸载时如何停止
- java - onClickListener 中的 if 语句试图获取 androidtextwidget 的值
- flutter - 团队“null”没有帐户
- laravel - 将自定义中间件添加到组
- jenkins - Jenkins 在给定的时间间隔触发构建步骤/阶段(不是整个作业)
- c# - C# - 对象列表 - 访问对象的参数
- sql - SQL 查询 - 转换时返回特定项目参数错误的结果
- cpu - 在超级简单 CPU 上:超级简单 CPU 上两个输入的 GCD
- r - 如何处理 R 中不平衡的数据集?