python - 在两列中逐行创建新值
问题描述
您好我正在尝试根据两列中的值组合创建一个新列
我拥有的原始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 |
谢谢
解决方案
numpy.select
与链条件一起使用&
for 按位并由andAND
测试:Series.eq
Series.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'])
推荐阅读
- node.js - 在heroku中成功构建但应用程序错误
- android - Android 深层链接路径、pathPrefix 或 pathPattern 不起作用
- android - 由于新的 Android 和 GooglePlay 限制,在保持两个应用程序兼容方面发生冲突
- python - 在 Python FastAPI 中使用 websocket 并行发送/接收
- sqlite - 无法将 sqlite 依赖添加到 pom
- django - django 社交登录 allauth 的问题:如果电子邮件存在,则重定向到 http://127.0.0.1:8000/accounts/social/signup/#
- java - 如何过滤带有语音到文本的recyclerview项目
- kotlin - 自定义 AlertDialog 的圆角
- java - 如何修复 lang is undefined 问题 graphql 服务器错误?
- c++ - getline 函数中的缓冲区清理