首页 > 解决方案 > 在两列中逐行创建新值

问题描述

您好我正在尝试根据两列中的值组合创建一个新列

我拥有的原始df如下

|  id | code_1   | code_2  |
| --- | -------- |  -----  |
| A0  | 001      |  X1     |
| A1  | 001      |  X2     |
| A2  | 001      |  x3     |
| A3  | 001      |  x4     |
| A4  | 002      |  X1     |
| A5  | 002      |  X2     |

无论第一列中的 id 是什么,我只考虑第二列和第三列的组合,即“code_1”和“code_2”

如果“code_1”是 001,“code_2”是 x1、x2 和 x3,我想创建新列并给出Y1

如果'code_1'是001,'code_2'是x4,那么我想给Y2

如果'code_2'是002,'code_2'是x1和x2,那么我想给Z1

因此,该表的最终输出如下所示:

|  id | code_1   | code_2  |  new_code  |
| --- | -------- |  -----  |  --------  |
| A0  | 001      |  X1     |  Y1        |
| A1  | 001      |  X2     |  Y1        |
| A2  | 001      |  x3     |  Y1        |
| A3  | 001      |  x4     |  Y2        |
| A4  | 002      |  X1     |  Z1        |
| A5  | 002      |  X2     |  Z1        |

谢谢

标签: pythonpandasdataframe

解决方案


numpy.select与链条件一起使用&for 按位并由andAND测试:Series.eqSeries.isin

m1 = df['code_1'].eq('001') & df['code_2'].isin(['x1', 'x2', 'x3'])
m2 = df['code_1'].eq('001') & df['code_2'].eq('x4')
m2 = df['code_1'].eq('002') & df['code_2'].eq(['x1', 'x2'])

df['new_code'] = np.select([m1, m2, m3], ['Y1','Y2','Z1'])

推荐阅读