如何用Pandas新增列并按多条件为指定行赋值
为Pandas DataFrame按多条件新增并赋值列
问题场景
需要在数据集新增一列,根据多个条件为特定行插入值,此前找到的方案仅支持单个条件,无法满足需求。由于数据每日更新,不能通过行号定位,必须用条件匹配。
原始DataFrame
| Date | Group | State | Count |
|---|---|---|---|
| 2021-01-01 | 001 | IL | 0 |
| 2021-01-01 | 002 | IL | 5 |
| 2021-01-02 | 001 | CA | 3 |
| 2021-01-02 | 002 | CA | 9 |
| 2021-01-03 | 001 | AZ | 2 |
| 2021-01-03 | 002 | AZ | 8 |
| 2021-01-04 | 001 | WY | 4 |
| 2021-01-04 | 002 | WY | 7 |
需求
新增Sub列,仅在Date == '2021-01-03'、Group == '002'且State == 'AZ'的行赋值3,其余行赋值0。
解决方案
先初始化Sub列默认值为0,再通过loc结合多条件筛选更新目标行:
# 初始化Sub列所有值为0 df['Sub'] = 0 # 对符合多条件的行赋值3 df.loc[(df['Date'] == '2021-01-03') & (df['Group'] == '002') & (df['State'] == 'AZ'), 'Sub'] = 3
关键说明
- 用
&连接多个条件,每个条件需用括号包裹,避免运算优先级错误 - 先初始化列可确保所有行都有默认值0,避免未匹配行出现
NaN - 基于条件匹配的方式不受数据行号变化影响,适配每日更新的数据集
最终输出DataFrame
| Date | Group | State | Count | Sub |
|---|---|---|---|---|
| 2021-01-01 | 001 | IL | 0 | 0 |
| 2021-01-01 | 002 | IL | 5 | 0 |
| 2021-01-02 | 001 | CA | 3 | 0 |
| 2021-01-02 | 002 | CA | 9 | 0 |
| 2021-01-03 | 001 | AZ | 2 | 0 |
| 2021-01-03 | 002 | AZ | 8 | 3 |
| 2021-01-04 | 001 | WY | 4 | 0 |
| 2021-01-04 | 002 | WY | 7 | 0 |
内容的提问来源于stack exchange,提问作者Trevor M
相关产品推荐
相关产品推荐

