我需要根据其他列中的值有条件地填充数据框中的新列

时间:2020-05-19 19:31:18

标签: python pandas

您会了解,我对熊猫还很陌生,但我发现自己陷入了以下问题。 可以说我拥有以下Facebook数据(为方便起见,我将它们完全随机化了):

        Ad Set Name                             Impresions Link Clicks
0   253-Page.Visitors.10.Days                       100       3
1   254-Cart.Abandoners.10.Days                     300       9
2   253-Page.Visitors.10.Days                       900       27
3   256-LAL.5%.Add.to.Cart                        2,700       81
4   256-LAL.5%.Freq.Visits                        8,100       243
5   254-Cart.Abandoners.10.Days                   24,300      729
6   254-Cart.Abandoners.10.Days                   72,900      2,187

现在我要做的是创建一个名为“受众群体”的新列,并根据以下三个条件填充它:

  • 如果“广告集名称”列中包含“ Page.Visitors”一词,则应在新列受众群体中的相应单元格中填充“页面访问者”
  • 如果其中包含“购物车放弃者”,则应填充“购物车放弃者”
  • 最后,如果它包含“ LAL”,则应填充“ Lookalikes”

这是我尝试执行的操作:

for i in data['Ad Set Name']:
    if 'Page.Visitors' in i:
        data.loc[i,'audiience'] = 'Page Visitors'
    elif 'Cart.Abandoners' in i:
        data.loc[i,'audience'] = 'Cart Abandoners'
    else:
        data.loc[i,'audience'] = 'Lookalikes'
data.head()

但是我返回的列充满了NaN。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

您需要以下内容: 首先,您需要导入numpy:

import numpy as np

然后将列受众群体设置为nans udn,以这种方式填充您的数据

df['audiience'] =np.nan
df.loc[df[df['Ad Set Name'].str.contains('Page.Visitors', regex=False)==True].index, 'audiience'] = 'Page Visitors'
df.loc[df[df['Ad Set Name'].str.contains('Cart.Abandoners', regex=False)==True].index, 'audiience'] = 'Cart Abandoners'
df.loc[df[df['Ad Set Name'].str.contains('LAL', regex=False)==True].index, 'audiience'] = 'Lookalikes'

这将为您提供以下数据框:

Ad Set Name                  Impresions Link Clicks audiience
0   253-Page.Visitors.10.Days       100     3       Page Visitors
1   254-Cart.Abandoners.10.Days     300     9       Cart Abandoners
2   253-Page.Visitors.10.Days       900     27      Page Visitors
3   256-LAL.5%.Add.to.Cart         2700     81      Lookalikes
4   256-LAL.5%.Freq.Visits         8100     243     Lookalikes
5   254-Cart.Abandoners.10.Days   24300     729     Cart Abandoners
6   254-Cart.Abandoners.10.Days   72900     2187    Cart Abandoners

答案 1 :(得分:0)

我认为您可以执行numpy.select

conditions = [
    (df["Ad Set Name"].str.contains("Page.Visitors")),
    (df["Ad Set Name"].str.contains("Cart.Abandoners")),
]

choices = ["Page Visitors", "Cart Abandoners"]

df["audience"] = numpy.select(conditions, choices, default="Office - Lookalikes")

答案 2 :(得分:0)

此外,另一位用户最初提供了以下答案,出于某种原因,我现在可以看到该答案已被删除。 这也很好用,对我(我是大熊猫的新手)来说也很容易阅读和理解:

def replace_ad_set(text):
    if "Page.Visitors" in text:
        return "Page Visitors"
    elif 'Cart.Abandoners' in text:
        return "Cart Abandoners"
    elif "LAL" in text:
        return "Lookalikes"

data["audience"] = data["Ad Set Name"].apply(replace_ad_set)

data