【发布时间】:2021-01-14 14:24:06
【问题描述】:
我在这里看过一堆类似的帖子,但没有一个真正回答我的问题:
Df:
pc_cogs = pd.DataFrame({'Product': ['Product 1','Product 95','Product 10','Product 44','Product 100','Product 69','Product 78','Product 3'],
'Pack_type':['Case - 4x6 - 12oz - Can', 'Case - 4x6 - 12oz - Can', 'Case - 6x4 - 16oz - Can','Case - 6x4 - 12oz - Can',
'Case - 6x4 - 16oz - Can','Cask - Pin', 'Case - 12x - 22oz - Bottle','Case - 6x4 - 12oz - Can'],
'Keg Category': ['REGULAR', 'SEASONAL', 'WINTER', 'SEASONAL', 'SEASONAL', 'FALL', 'SEASONAL', 'WINTER'],
'Unit_Sale_Price': [5, 8, 10, 22, 45, 56, 33, 23],
'New Price': [0,0,0,0,0,0,0,0]})
需要回答:
new_pc_cogs = pd.DataFrame({'Product': ['Product 1','Product 95','Product 10','Product 44','Product 100','Product 69','Product 78','Product 3'],
'Pack_type':['Case - 4x6 - 12oz - Can', 'Case - 4x6 - 12oz - Can', 'Case - 6x4 - 16oz - Can','Case - 6x4 - 12oz - Can',
'Case - 6x4 - 16oz - Can','Cask - Pin', 'Case - 12x - 22oz - Bottle','Case - 6x4 - 12oz - Can'],
'Keg Category': ['REGULAR', 'SEASONAL', 'WINTER', 'SEASONAL', 'SEASONAL', 'FALL', 'SEASONAL', 'WINTER'],
'Unit_Sale_Price': [5, 8, 10, 22, 45, 56, 33, 23],
'New Price': [7.36,7.54,13.47,21.87,44.87,56,33,23]})
尝试添加列: 条件中使用的存储列表和变量:
## Pack type
four_pack = 'Case - 6x4 - 16oz - Can'
six_pack = 'Case - 4x6 - 12oz - Can'
four_pack2 = 'Case - 6x4 - 12oz - Can'
## Core Brands
core_brands = ['Prod 1','Prod 2', 'Prod 3',
'Prod 4', 'Prod 5', 'Prod 6', 'Prod 7','Prod 8']
cali_brands = ['Prod 9', 'Prod 10']
尝试 1:
for product in pc_cogs['Product']:
package = pc_cogs['Pack_type']
category = pc_cogs['Keg Category']
price = pc_cogs['Unit_sale_price']
if product in core_brands & package == six_pack:
pc_cogs['Price Change'] = price + 2.36
elif category == 'SEASONAL' & package == six_pack:
pc_cogs['Price Change'] = price - .46
elif product in cali_brands & package == four_pack:
pc_cogs['Price Change'] = price + 3.47
elif (category == 'SEASONAL') & (package == four_pack | package == four_pack2):
pc_cogs['Price Change'] = price - .13
else:
pc_cogs['Price Change'] = 0
错误:操作数无法与形状一起广播 (8,) (611,) 最后一个 elif 包含两个条件。我也尝试过使用其他条件,但没有成功。
尝试 2:
pc_cogs['Price Change'][(pc_cogs['Product'] in core_brands) & (pc_cogs['Package'] == six_pack)] = pc_cogs['Unit_sale_price'] + 2.36`
错误:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 我看到了显示此错误的热门帖子的链接。它说要从单词和/或更改为 &|我做到了。
我也看到了这个:Creating Column in Dataframe Using Multiple Conditions。
但这并没有帮助。
任何帮助将不胜感激
【问题讨论】:
-
请显示您的起始输入的示例数据框,然后显示您想要的输出。请看:stackoverflow.com/questions/20109391/…
-
知道了。给我20分钟
-
数据框最好的部分是您不需要循环使用条件来更新列。您可以只给出条件,如果它是 true ,它将自行更新。
-
好的。我已经包含了两个用于开始和结束的 df 模板。我在 Jupyter 中检查它们以确保它们看起来正确。
-
我是这么认为的,乔。我只用了 2 个月,而且我经常陷入 Python 方式之间,忘记了 df 使用 pandas 的灵活性。