首页 > 解决方案 > 如何在数据框中创建一个新的 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)。

我尝试了几种技巧,但无法获得上述预期结果。任何帮助将不胜感激。

谢谢

标签: pythonpandasdataframenumpy

解决方案


明确要求

  1. 对于 every contactid, eachbonustype只能在聚合文本中使用一次NEW_COLUMN
  2. 对于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

推荐阅读