Python 如何使用VLOOKUP在Pandas中的新列中添加值?

Python 如何使用VLOOKUP在Pandas中的新列中添加值?,python,python-3.x,pandas,performance,vlookup,Python,Python 3.x,Pandas,Performance,Vlookup,我正在从事一个分析亚马逊营销活动数据集的项目。这些运动有等级制度: “Camapigns”包括 “广告组”包括 “关键词” 虽然我可以看到所有记录类型(活动、广告组和关键字)的性能值,但“出价”的更改只能在记录类型关键字上进行。实际的活动有17000行和几个不同的活动等,但是,我在这里创建了一个示例版本: 将熊猫作为pd导入 d={'Record Type':['Campaign'、'AdGroup'、'Keyword'、'Keyword'、'Keyword'], ‘活动’:[‘测试活动’、‘测

我正在从事一个分析亚马逊营销活动数据集的项目。这些运动有等级制度:

“Camapigns”包括 “广告组”包括 “关键词”

虽然我可以看到所有记录类型(活动、广告组和关键字)的性能值,但“出价”的更改只能在记录类型关键字上进行。实际的活动有17000行和几个不同的活动等,但是,我在这里创建了一个示例版本:

将熊猫作为pd导入
d={'Record Type':['Campaign'、'AdGroup'、'Keyword'、'Keyword'、'Keyword'],
‘活动’:[‘测试活动’、‘测试活动’、‘测试活动’、‘测试活动’、‘测试活动’、‘测试活动’],
“AdGroup”:[“”、'AdGroup_A'、'AdGroup_A'、'AdGroup_A'、'AdGroup_A'],
'关键字':['','Keyword_A','Keyword_B','Keyword_C'],
‘出价’:['NA','NA',1,1,1],
“性能”:[0.3'、'0.9',0.6,1.1,1.3]}
df=pd.DataFrame(数据=d)
打印(df)
我希望该计划做什么:

1) 检查“记录类型”AdGroup的性能。如果性能有特定条件(例如,如果性能<1),则应更改“记录类型”关键字的出价(例如+10%)

我的想法是:

  • 创建一个新列,该列由值“campaign_AdGroup”组合而成(然后每个AdGroup都有一个单数值,因为同名的AdGroup可能位于另一个campaign中)

  • 用action“action”的值创建另一列(例如:110%,因为我们想用10%提升关键字)

  • 在最后一步中,我将遍历所有“Record Type”关键字,并对“campaign+AdGroup”的组合进行VLOOKUP。如果在“操作”中找到结果,则特定关键字的出价应与“操作”值相乘
  • 你对第三步有什么建议吗。?这是最后一个代码:

    将熊猫作为pd导入
    d={'Record_Type':['Campaign','AdGroup','Keyword','Keyword','Keyword'],'Campaign':['Test_Campaign','Test_Campaign',
    ‘测试活动’、‘测试活动’、‘测试活动’、‘广告组’:[“”、‘广告组A’、‘广告组A’、‘广告组A’、‘广告组A’、‘广告组A’、‘广告组A’]
    “,”关键字“:[”,”关键字“,”关键字“,”关键字“,”关键字“,”关键字“,”关键字“,”投标“:[”不适用“,”不适用“,”1,1,1],”性能“:[0.3,0.9,0.6,1.1,1.3])
    df=pd.DataFrame(数据=d)
    df['Action']=1
    df['Help']=df['Record_Type']+df['Campaign']
    打印(df)
    
    我可能会使用apply lambda函数。 i、 e

    df[“操作”]=df.apply(如果r[“记录类型”]=“AdGroup”和r[“性能”]<1,则λr:1.1,否则r[“操作”],轴=1)
    

    您还可以将iloc与条件一起使用。

    我可能会使用apply lambda函数。 i、 e

    df[“操作”]=df.apply(如果r[“记录类型”]=“AdGroup”和r[“性能”]<1,则λr:1.1,否则r[“操作”],轴=1)
    

    您也可以在有条件的情况下使用iloc。

    谢谢您的帮助,但现在它不是问题的解决方案。因为:如果一个广告组的性能值小于1,我想更改这个广告组中每个关键字的出价。迭代必须分为两个步骤:1)检查AdGroup级别的性能,如果需要更改关键字的出价值,则保存信息。保存的数据可以是“活动”+“广告组”和动作的数据集。2) 在第二步中,需要检查所有“Record_Type”关键字。如果关键字的“活动”+“广告组”在之前的列表中,则必须在关键字级别执行操作。例如,在本例中,“AdGroup_A”的性能为0.9。我们需要保存信息“Test_CampaignAdGroup_A”和“Action”值“1.1”。在第二步中,我们需要检查所有“记录类型”关键字。对于每个关键字,还将构建“活动”+“广告组”的组合。现在,它必须是在AdGroup的相同数据上的VLOOKUP,如果有一个操作,那么该操作需要与关键字的出价相乘。在这种情况下,所有关键字必须与1.1相乘。感谢您的帮助,但现在它不是问题的解决方案。因为:如果一个广告组的性能值小于1,我想更改这个广告组中每个关键字的出价。迭代必须分为两个步骤:1)检查AdGroup级别的性能,如果需要更改关键字的出价值,则保存信息。保存的数据可以是“活动”+“广告组”和动作的数据集。2) 在第二步中,需要检查所有“Record_Type”关键字。如果关键字的“活动”+“广告组”在之前的列表中,则必须在关键字级别执行操作。例如,在本例中,“AdGroup_A”的性能为0.9。我们需要保存信息“Test_CampaignAdGroup_A”和“Action”值“1.1”。在第二步中,我们需要检查所有“记录类型”关键字。对于每个关键字,还将构建“活动”+“广告组”的组合。现在,它必须是在AdGroup的相同数据上的VLOOKUP,如果有一个操作,那么该操作需要与关键字的出价相乘。在这种情况下,所有关键字必须乘以1.1。
    df["Action"] = df.apply(lambda r: 1.1 if r["Record_Type"] == "AdGroup" and r["Performance"] < 1 else r["Action"], axis=1)