python - 如何在数据框中创建一个新的 col3 来检查多个值是否在 col1 中并检查 col2 中的值
问题描述
Pandas 或 NumPy 的现有数据框和所需结果:contactid、bonustype、bonusreceived、NEW_COLUMN
contactid bonustype bonusreceived NEW_COLUMN
100 a yes ab
100 b no NULL
200 a no NULL
200 b yes abc
200 c yes abc
如果两个值(a,b)都为真并且bondreceived 对于contactid 为“是”,我必须从bonustype 中检查,然后在NEW_COLUMN 中返回(ab)。如果所有三个 bonustype (a, b, c) 和 bonusreceived 都是“是”,则在 NEW_COLUMN 中返回 (abc)。
我尝试了几种技巧,但无法获得上述预期结果。任何帮助将不胜感激。
谢谢
解决方案
明确要求
- 对于 every
contactid
, eachbonustype
只能在聚合文本中使用一次NEW_COLUMN
- 对于
bonusreceived
== 'no',对应的NEW_COLUMN
应该是NULL
我们可以使用.groupby()
+transform()
并加入 的唯一文本bonustype
。然后,用于np.where()
确保仅当bonusreceived
== 'yes' 我们获得聚合文本,NaN
否则设置。
import numpy as np
df['NEW_COLUMN'] = np.where(df['bonusreceived'] == 'yes',
df.groupby('contactid')['bonustype'].transform(lambda x: ''.join(x.unique())),
np.nan)
数据输入
print(df)
contactid bonustype bonusreceived
0 100 a yes
1 100 b no
2 200 a no
3 200 b yes
4 200 c yes
5 100 a no
6 200 a yes
结果:
print(df)
contactid bonustype bonusreceived NEW_COLUMN
0 100 a yes ab
1 100 b no NaN
2 200 a no NaN
3 200 b yes abc
4 200 c yes abc
5 100 a no NaN
6 200 a yes abc
推荐阅读
- python - Odoo-14:ValueError:ir.actions.report.report_type 的值错误:'qweb-pdf'
- reactjs - 使用 Laravel 护照 Oauth2 反应 js Web 应用程序
- c# - 通过正则表达式在c#中打开html标签
- powerbi - 在查询编辑中执行的编辑与在建模期间执行的编辑有什么区别?
- spring - 控制器参数给出一个奇怪的错误
- javascript - 无法点击显示更多文字
- css - 找不到 Angular Material 核心主题 - 如何将 Angular Material css 添加到 Liferay Portlet
- react-native - 从平面列表中选择和删除多个项目
- linux - 将非常大的原始文件转换为 csv 文件,tf.data.Dataset
- python - 访问由多层感知器构建的神经网络模型的权重的火炬错误